当存储在变量中的单个值时,以下工作正常.
SET @a := "20100630";
SELECT * FROM wordbase WHERE verified = @a;
Run Code Online (Sandbox Code Playgroud)
但是当变量中存储多个值时,它不起作用.
SET @a := "'20100630', '20100701' ";
SELECT * FROM wordbase WHERE verified in (@a);
Run Code Online (Sandbox Code Playgroud)
我需要为此准备好的陈述吗?
gri*_*X19 15
这里描述了很好的解决方案:https://stackoverflow.com/a/11957706/1523961
所以可以使用这样的东西:
SET @a := '20100630,20100701';
SELECT * FROM wordbase WHERE FIND_IN_SET(verified, @a);
Run Code Online (Sandbox Code Playgroud)
此外,如果您@a从另一个表中选择ID ,则可以提出以下信息:
SET @a := (SELECT GROUP_CONCAT(id) FROM someTable where yourBooleanExpressionHere);
SELECT * FROM wordbase WHERE FIND_IN_SET(verified, @a);
Run Code Online (Sandbox Code Playgroud)
据我所知,您不能在MySQL用户定义的变量中存储多个值。您要做的是创建一个包含以下内容的字符串:
'20100630', '20100701'
Run Code Online (Sandbox Code Playgroud)
那不是两个单独的值,而是一个字符串值,就像这是一个字符串值一样:
SET @a := "It's a single string, and that's the problem";
Run Code Online (Sandbox Code Playgroud)
您需要使用两个单独的变量或准备一条语句,如下所示:
SET @a := "20100630";
SET @b := "20100701";
SET @sql = CONCAT(
'SELECT * FROM wordbase WHERE verified IN (',
@a,
',',
@b,
')'
);
SELECT @sql;
+--------------------------------------------------------------+
| @sql |
+--------------------------------------------------------------+
| SELECT * FROM wordbase WHERE verified IN (20100630,20100701) |
+--------------------------------------------------------------+
PREPARE stmt FROM @sql;
EXECUTE stmt;
Run Code Online (Sandbox Code Playgroud)
但这有点混乱。为什么需要使用变量?
使用GROUP_CONCATandGROUP BY可以将所有值(即 id )放入一个变量中,如下所示:
SET @var := (SELECT GROUP_CONCAT(id) FROM `table` WHERE `verified` = @verified GROUP BY verified);
Run Code Online (Sandbox Code Playgroud)