首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL使用字符串变量选择具有where条件的查询

问MySQL使用字符串变量选择具有where条件的查询
EN

Stack Overflow用户
提问于 2015-12-22 05:03:40
回答 3查看 10.2K关注 0票数 0

我自己试图将字符串变量传递到MySQL查询中的where条件,如下所示,在这个stack overflow answer中给出了这个条件。

代码语言:javascript
复制
select @start := ' and  Id=21';

select * from myTable where 1=1 @start;

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

编辑:我也尝试过

代码语言:javascript
复制
SET @start = ' Id=21 ';

select * from myTable where (select @start);

但没用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-22 05:13:32

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

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

手册上说:

条件对象由一个或多个条件片段组成,这些片段都将由指定的连接连接。默认情况下,该连接是和。

票数 1
EN

Stack Overflow用户

发布于 2016-05-11 13:57:11

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

您可以使用SQL语句创建varchar变量,然后使用EXEC执行它,这里是从

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

如果你想做这样的事

代码语言:javascript
复制
DECLARE @city varchar(75)

SET @city = 'London'

SELECT * FROM customers WHERE City = @city

这是动态查询创建。

代码语言:javascript
复制
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.
*/
票数 1
EN

Stack Overflow用户

发布于 2019-07-11 18:12:35

存储查询的一部分

代码语言:javascript
复制
SET @start = ' and  Id=21';

存储连接其部件的查询

代码语言:javascript
复制
SET @s = CONCAT('select * from myTable where 1=1 ', @start);

准备执行语句

代码语言:javascript
复制
PREPARE stmt FROM @s;

执行已准备好的语句

代码语言:javascript
复制
EXECUTE stmt;

发布准备好的报表

代码语言:javascript
复制
DEALLOCATE PREPARE stmt;

合在一起:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34408754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档