我想更新多行:
UPDATE tbl SET x = x + 5 WHERE x < 7;
然后,我想选择相同的行作为结果集:
SELECT * FROM tbl WHERE (row fulfilled previous condition);
我该怎么做?
最佳答案
这个答案适用于 mySQL,但它也应该足够通用以适用于其他 DBMS。它避免了额外的行、限制或丑陋的黑客攻击,易于扩展,并且不会在不需要时损失性能。
START TRANSACTION;
DROP TEMPORARY TABLE IF EXISTS temp;
CREATE TEMPORARY TABLE temp AS (
SELECT * FROM tbl WHERE x < 7
);
UPDATE temp SET x = x + 5;
REPLACE INTO tbl SELECT * FROM temp;
SELECT * FROM temp;
COMMIT;
如果您在 PHP/PDO 中使用它,您可能需要先选择正确的结果集。错误 HY000
就是一个指示。
$stmt = db -> prepare ($sql);
$stmt->execute ();
for ($i=0; $i<5; $i++)
$stmt->nextRowset ();
$result = $stmt->fetchAll ();
关于mysql - 如何自动更新多行并选择它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42308005/