我更新了一堆记录并返回了他们的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);
答案 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;
在交易中执行此操作。