我正在尝试运行这个:
$stmt=$cxn->prepare("UPDATE table1 SET used='1' WHERE prim_id !=
(SELECT MAX(prim_id) FROM table1 WHERE email='email12345@gmail.com')");
$stmt->execute(array());
但它会导致MySQL错误:#1093 - You can't specify target table 'table1' for update in FROM clause
。
搜索这个错误后,似乎In MySQL, you can't modify the same table which you use in the SELECT part.
。
如何更改该查询以使其工作?
提前感谢
试试这个:
UPDATE table1 t1, (SELECT MAX(prim_id) AS max_prim_id
FROM table1 WHERE email='email12345@gmail.com') tmp
SET t1.used='1'
WHERE t1.prim_id != tmp.max_prim_id
AND t1.`email` = 'email12345@gmail.com'
它删除子查询,并使用一个常规的临时表来存储表"tmp"的结果。查询需要2个表进行更新:
- 表1(别名t1)
- 临时表(别名tmp)
WHERE子句:
- 指示两个表的连接方式
- 限制表t1中要考虑的记录
SET子句表示只有t1.used会被更新。
UPDATE语句
您的查询只是缺少一些逻辑。更改为:
UPDATE table1
SET used='1'
WHERE `email` = 'email12345@gmail.com'
AND prim_id != (
SELECT MAX(prim_id)
FROM table1
WHERE email='email12345@gmail.com')