mysql变量中的多个值

sha*_*nuo 14 mysql

当存储在变量中的单个值时,以下工作正常.

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)


Mik*_*ike 5

据我所知,您不能在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)

但这有点混乱。为什么需要使用变量?


Bes*_*gis 5

使用GROUP_CONCATandGROUP BY可以将所有值(即 id )放入一个变量中,如下所示:

SET @var := (SELECT GROUP_CONCAT(id) FROM `table` WHERE `verified` = @verified GROUP BY verified);
Run Code Online (Sandbox Code Playgroud)

  • 取决于值的数量。GROUP_CONCAT 具有最大长度。 (3认同)