當存儲單個值存儲在變量中時,以下方式將按預期工作。mysql變量中的多個值
SET @a := "20100630";
SELECT * FROM wordbase WHERE verified = @a;
但是,當變量中存儲多個值時,它不起作用。
SET @a := "'20100630', '20100701' ";
SELECT * FROM wordbase WHERE verified in (@a);
我是否需要爲此使用預處理語句?
當存儲單個值存儲在變量中時,以下方式將按預期工作。mysql變量中的多個值
SET @a := "20100630";
SELECT * FROM wordbase WHERE verified = @a;
但是,當變量中存儲多個值時,它不起作用。
SET @a := "'20100630', '20100701' ";
SELECT * FROM wordbase WHERE verified in (@a);
我是否需要爲此使用預處理語句?
你不能(據我所知)在MySQL用戶定義的變量中存儲多個值。你所做的是創建一個包含一個字符串:
'20100630', '20100701'
這不是兩個單獨的值,但一個字符串值,只是因爲這是一個字符串值:
SET @a := "It's a single string, and that's the problem";
您需要使用兩個單獨的變量,或準備一個聲明,如下所示:
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;
但是,這有點凌亂。爲什麼你需要使用變量?
像這樣的東西應該工作。使用預處理語句來創建像這樣的臨時表是否可以?
SET @a := "'20100630', '20100701'";
SET @sql = CONCAT('create temporary table pn1 SELECT * FROM wordbase WHERE verified IN (', @a, ')');
PREPARE stmt FROM @sql;
EXECUTE stmt;
select * from pn1;
我知道這是一箇舊帖子,但是這個工作非常完美,特別是當你有多個值時。 – sho 2011-11-01 06:55:50
使用GROUP_CONCAT
和GROUP BY
一個可以把所有的值(即一個id)到像這樣的變量:
SET @var := (SELECT GROUP_CONCAT(id) FROM `table` WHERE `verified` = @verified GROUP BY verified);
取決於值的數量。 GROUP_CONCAT有一個最大長度。 – buggedcom 2015-04-29 12:08:02
這裏有描述很好的解決方案:https://stackoverflow.com/a/11957706/1523961
所以可以使用類似這個:
SET @a := '20100630,20100701';
SELECT * FROM wordbase WHERE FIND_IN_SET(verified, @a);
另外,如果你是seleclec婷的ID爲@a
從另一個表,你能想出以下:
SET @a := (SELECT GROUP_CONCAT(id) FROM someTable where yourBooleanExpressionHere);
SELECT * FROM wordbase WHERE FIND_IN_SET(verified, @a);
SELECT GROUP_CONCAT(field_table1 SEPARATOR ',') FROM table1 into @var;
然後
SELECT * FROM table2 WHERE field_table2 in(@var);
工作正常,我
我不明白這是如何工作的。第一個查詢在將其轉換爲字符串後創建一個大字符串,即「field_table1」的串聯。第二個查詢檢查'field_table2'是否等於那個大量的字符串。 – xhienne 2018-02-14 17:30:39
SET @a:=「 '20100630' ,'20100701'「應該被設置爲@a:=」20100630,20100701「。你已經爲整數值添加引號,導致它不返回任何行 – Akash 2013-07-21 08:57:06