이렇게하는 한 가지 방법은 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 (왼쪽)이 일치하는 행을 찾습니다 가입하지만,하는 행이 없을 경우 다음 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
spencer7593이되지 작동 :(내가 MySQL의에서 오류가 발생했습니다 및 SQL 바이올린이 (스키마 생성 실패 : 당신은 당신의 SQL 구문에 오류가, 오른쪽 구문 MySQL 서버 버전에 해당하는 설명서를 확인을 'UPDATE player_items'근처에서 사용) – user2573981
두 번째 옵션도 작동하지 않습니다. ( – user2573981
SET 절이 잘못된 위치에 있고, WHERE 절 앞에 속합니다. 쿼리를 수정했는데 나에게 맞는 것 같습니다. – spencer7593