テーブルに指定された値が含まれていない場合にのみ、mysql の更新を作成したい (プレーヤーに空のスロットがある場合)
私の考え:
update player_items
set slot=20
where id=0
and uid=2
and (SELECT COUNT(*)
FROM player_items
WHERE slot=12 and uid=2) = 0;
これが mysql の質問の 1 つに過ぎないことを願っています
テーブルに指定された値が含まれていない場合にのみ、mysql の更新を作成したい (プレーヤーに空のスロットがある場合)
私の考え:
update player_items
set slot=20
where id=0
and uid=2
and (SELECT COUNT(*)
FROM player_items
WHERE slot=12 and uid=2) = 0;
これが mysql の質問の 1 つに過ぎないことを願っています
これを行う 1 つの方法は、anti-join パターンを使用することです。
UPDATE player_items p
LEFT
JOIN ( SELECT uid
FROM player_items
WHERE slot = 12
AND uid = 2
LIMIT 1
) q
ON q.uid = p.uid
SET p.slot = 20
WHERE p.id = 0
AND p.uid = 2
AND q.uid IS NULL
LEFT JOIN は一致する行を探しますが、一致する行が見つからない場合、MySQL はすべて NULL 値を持つ行を生成します。述語を使用して一致した行を除外できるq.uid IS NULL
ため、一致しなかった行のみが取得されます。
mysql> UPDATE player_items p
-> LEFT
-> JOIN ( SELECT uid
-> FROM player_items
-> WHERE slot = 12
-> AND uid = 2
-> LIMIT 1
-> ) q
-> ON q.uid = p.uid
-> SET p.slot = 20
-> WHERE p.id = 0
-> AND p.uid = 2
-> AND q.uid IS NULL
-> ;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0