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

时间:2015-12-22 05:03:41

标签: mysql variables stored-procedures

我自己尝试将字符串变量传递给MySQL查询中的where条件,如下面给出的stack overflow answer中所示。

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

select * from myTable where 1=1 @start;

那么如何在MySQL查询中的where where条件中使用字符串变量。变量是动态设置的,查询在过程中运行。

编辑:我也试过

SET @start = ' Id=21 ';

select * from myTable where (select @start);

但没用。

3 个答案:

答案 0 :(得分:1)

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

所以你不能像你posted那样创建一个动态的where子句语句。在该示例中,列中的值是动态值而不是列名。

手册说:

  

条件对象由一个或多个条件片段组成   这将全部由指定的连接加入。默认情况下,那   连词是 AND

答案 1 :(得分:1)

我相信您尝试的是使用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.
*/

答案 2 :(得分:0)

存储部分查询

SET @start = ' and  Id=21';

将查询串联起来存储您的查询

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

准备要执行的语句

PREPARE stmt FROM @s;

EXECUTE执行一条准备好的语句

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/en/sql-syntax-prepared-statements.html