MySQL - WHERE IN(@blob)仅返回第一行

时间:2014-12-05 11:39:43

标签: mysql where-clause

我更新了一堆记录并返回了他们的ID,然后我需要SELECT他们。 使用WHERE IN我只获得第一行 我怎么能SELECT所有人呢?

SET @updated := null;
UPDATE table1 set table1.enabled = 0 WHERE table1.limit > 10 AND (SELECT @updated := CONCAT_WS(', ', table1.id, @updated));
SELECT * from table1 where table1.id IN (@updated);

1 个答案:

答案 0 :(得分:1)

不要把它放在where条款中。你可以这样做:

SET @updated := null;
UPDATE table1 
set table1.enabled = 0 
, id = if(@updated := concat_ws(', ', table1.id, @updated), id, id)
WHERE table1.limit > 10; 
SELECT * from table1 where table1.id IN (@updated);
不用担心,如果值没有变化,MySQL不会更新列,MySQL也不会更新列。

但请注意,您也可以先选择并稍后更新。

START TRANSACTION;
SELECT GROUP_CONCAT(id SEPARATOR ', ') INTO @updated FROM table1 WHERE limit > 10;
UPDATE ...
COMMIT;

在交易中执行此操作。