问题
I have this simple query that works on all other database systems, but fails with MySQL:
UPDATE points p
SET p.userid = 5224
WHERE p.userid = 2532
AND NOT EXISTS (
SELECT 1
FROM points q
WHERE q.userid = 5224
AND q.game = p.game
)
I get the following error message:
#1093 - You can't specify target table 'p' for update in FROM clause
Is there any workaround?
回答1:
You can't alias the main table in an UPDATE clause. This should work:
UPDATE points
SET userid = 5224
WHERE userid = 2532
AND NOT EXISTS (
SELECT 1
FROM points q
WHERE q.userid = 5224
AND q.game = points.game
)
回答2:
Use:
UPDATE POINTS
SET userid = 5224
WHERE userid = 2532
AND game NOT IN (SELECT q.game
FROM POINTS q
WHERE q.userid = 5224)
来源:https://stackoverflow.com/questions/1805009/using-exists-with-mysql