我有一张这样的桌子:
+----------------------------+
| user | date | current |
+----------------------------+
| 1 | 20010101 | 1 |
| 1 | 20020202 | 1 |
| 1 | 20030303 | 1 |
| 2 | 20010101 | 1 |
| 2 | 20020202 | 1 |
+----------------------------+
我想更新当前列,以便只有每个用户的最新条目有 1。
我曾计划:
UPDATE table t1 SET current = 0
WHERE EXISTS (
SELECT id
FROM table t2
WHERE t2.user = t1.user
AND t2.date > t1.date )
)
但这告诉我ERROR 1093 (HY000): You can't specify target table 't1' for update in FROM clause
有没有办法绕过 MySQL 的这个限制?
是的,有一种解决方法,
JOIN
用于派生表:如果
(user, date)
不足以保证唯一性并且还有一些其他id
列是唯一的或主键(或者(user, date, id)
是唯一的,这就足够了),您可以这样做以使每个用户只保留一行current=1
:或者你可以这样写