繁体   English   中英

MySQL选择查询使用字符串变量的条件

[英]MySQL select query with where condition using string variables

我自己试图将字符串变量传递到如下所示的此堆栈溢出答案中给出的MySQL查询中的where条件。

select @start := ' and  Id=21';

select * from myTable where 1=1 @start;

因此,如何在MySQL查询中将字符串变量与where条件一起使用。 动态设置变量,查询在过程中运行。

编辑:我也尝试过

SET @start = ' Id=21 ';

select * from myTable where (select @start);

但是没用。

不,你不能那样做。 在准备select语句时,需要固定 select子句中的列和条件。

因此,您不能像发布的那样创建动态的where子句语句。 在该示例中,列中的值是动态的,而不是列名。

该手册说:

一个条件对象由一个或多个条件片段组成,这些片段都将通过指定的连词进行连接。 默认情况下,该连接为AND

我相信您正在尝试使用EXEC命令创建动态查询。

您可以使用SQL语句创建varchar变量,然后使用EXEC执行该变量,此处示例摘自

https://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql-commands-in-sql-server/

如果你想做类似的事情

DECLARE @city varchar(75)

SET @city = 'London'

SELECT * FROM customers WHERE City = @city

这是动态查询的创建。

DECLARE @sqlCommand varchar(1000)

DECLARE @columnList varchar(75)

DECLARE @city varchar(75)

SET @columnList = 'CustomerID, ContactName, City'

SET @city = '''London'''

SET @sqlCommand = 'SELECT ' + @columnList + ' FROM customers WHERE City = ' + @city

EXEC (@sqlCommand) --This does the magic 


/*
just a heads up, the user impersonating the execution needs credentials for EXEC command.
*/

存储部分查询

SET @start = ' and  Id=21';

存储查询,将其各个部分串联起来

SET @s = CONCAT('select * from myTable where 1=1 ', @start);

准备执行语句

PREPARE stmt FROM @s;

执行执行准备好的语句

EXECUTE stmt;

释放准备好的语句

DEALLOCATE PREPARE stmt;

全部一起:

SET @start = ' and  Id=21';
SET @s = CONCAT('select * from myTable where 1=1 ', @start);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

有关MySQL手册的更多详细信息: https : //dev.mysql.com/doc/refman/5.7/zh-cn/sql-syntax-prepared-statements.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM