1

他のすべてのデータベースシステムで機能するこの単純なクエリがありますが、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

回避策はありますか?

4

2 に答える 2

3

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
)
于 2009-11-26T18:10:03.947 に答える
2

使用する:

UPDATE POINTS
   SET userid = 5224 
 WHERE userid = 2532 
   AND game NOT IN (SELECT q.game
                      FROM POINTS q
                     WHERE q.userid = 5224)
于 2009-11-26T18:14:28.963 に答える