DevLog ๐ถ
[MySQL] Error 1093: You can't specify target table for update in FROM clause ๋ณธ๋ฌธ
[MySQL] Error 1093: You can't specify target table for update in FROM clause
dolmeng2 2023. 5. 29. 13:53๐ฑ ๋ฌธ์ ์ํฉ
์ฌ์ฉ์์ ์์ฒญ์ผ๋ก๋ถํฐ ๋ฐ์์ฅ๋ฐ๊ตฌ๋ ์์ด๋์ ์ฌ์ฉ์์ ์์ด๋๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ์ ๊ฑฐํ๊ธฐ ์ํด ์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
DELETE FROM cart_item AS c
WHERE c.id
IN (
SELECT ci.id FROM cart_item AS ci
JOIN member AS m ON ci.member_id = m.id
AND ci.id IN (6, 8) AND m.id = 1
);
ํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ด target table (cart_item)์ c์ ๋ํด์ ์ ๋ฐ์ดํธ๋ฅผ ํ ์ ์๋ค๋ ๋ฌธ๊ตฌ๊ฐ ๋์๋ค.
๐ฑ ์์ธ
MySQL์์๋ update, delete ์์ ์๊ธฐ ์์ ์ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ์ค๋ฅ์๋ค.
(์ฐธ๊ณ ๋ก H2 ํ๊ฒฝ์์๋ ์ ๋์๊ฐ๋ค. ์๋ ์๋ ์ด๋ฐ ์ค๋ฅ๊ฐ ๋ฌ์๋๋ฐ... ๊ธฐ๋กํ์ง ์์ ์์ ์ตํ ๐ )
๐ฑ ํด๊ฒฐ ๋ฐฉ๋ฒ
IN ์ ๋ด๋ถ์ ์กด์ฌํ๋ ์๋ธ ์ฟผ๋ฆฌ์ ๋ํด์ ์์ ํ ์ด๋ธ๋ก ๋ง๋ ๋ค์์, ํด๋น ํ ์ด๋ธ์ ์ฐธ์กฐํ๋๋ก ๋ง๋ค๋ฉด ๋๋ค.
DELETE FROM cart_item AS c
WHERE c.id
IN (
SELECT cart_item_temp.id
FROM
(
SELECT ci.id AS id FROM cart_item AS ci
JOIN member AS m ON ci.member_id = m.id
AND ci.id IN (6, 8) AND m.id = 1
) cart_item_temp
);
์ฝ๋๊ฐ ๋ณต์กํ๊ธฐ๋ ํ์ง๋ง, h2์ mysql ํ๊ฒฝ ๋ชจ๋์์ ์ ๋์ํ๋๋ก ๋ง๋๋ ค๋ฉด ์ด์ฉ ์ ์๋ ์ ํ์ด์๋ค.
DELETE c
FROM cart_item AS c
JOIN member AS m ON c.member_id = m.id
WHERE c.id IN (6, 8) AND m.id = 1;
๋จ์ํ๊ฒ ์ด๋ ๊ฒ ์กฐ์ธ์ ํด๋ ๋์ง๋ง, h2์์๋ delete ์ ์ ๋ํด์ ๋ณ์นญ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ์๊ฐ ์์๋ค...
h2 mode๋ฅผ MySQL๋ก ํ๋๋ผ๋ ์ด๋ฐ ์ฟผ๋ฆฌ์ ๋ํด์๋ ์์ ๋์ผํ๊ฒ ๋์ํ์ง๋ ์๋ ๊ฒ ๊ฐ๋ค.