Использование EXISTS с MySQL - PullRequest
1 голос
/ 26 ноября 2009

У меня есть этот простой запрос, который работает на всех других системах баз данных, но не работает с 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
)

Я получаю следующее сообщение об ошибке:

#1093 - You can't specify target table 'p' for update in FROM clause

Есть ли обходной путь?

Ответы [ 2 ]

3 голосов
/ 26 ноября 2009

Вы не можете использовать псевдоним основной таблицы в предложении UPDATE. Это должно работать:

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 голосов
/ 26 ноября 2009

Использование:

UPDATE POINTS
   SET userid = 5224 
 WHERE userid = 2532 
   AND game NOT IN (SELECT q.game
                      FROM POINTS q
                     WHERE q.userid = 5224)
...