sql單語(yǔ)句實(shí)現(xiàn)多表刪除
此處要實(shí)現(xiàn)通過(guò)單一語(yǔ)句從三張表中刪除相關(guān)記錄,目標(biāo)是通過(guò)dishid執(zhí)行刪除操作。
提供的初始sql語(yǔ)句中,使用了inner join連接三個(gè)表,但由于第三張表沒有任何匹配記錄,導(dǎo)致前兩張表的數(shù)據(jù)未被刪除。
正確的改進(jìn)方式是使用left join連接,即使第三張表沒有匹配記錄,也能刪除前兩張表中的數(shù)據(jù)。修改后的sql語(yǔ)句如下:
DELETE dish, dish_flavor, setmeal_dish FROM dish LEFT JOIN dish_flavor ON dish.id = dish_flavor.id LEFT JOIN setmeal_dish ON dish.id = setmeal_dish.id WHERE dish.id IN ( 51, 52 );
登錄后復(fù)制
此語(yǔ)句將根據(jù)dishid在所有三張表中刪除相關(guān)記錄,無(wú)論其中哪張表存在要?jiǎng)h除的數(shù)據(jù)。
值得注意的是,inner join和left join之間的區(qū)別在于,inner join僅匹配同時(shí)在所有連接表中找到匹配項(xiàng)的記錄,而left join將返回所有匹配任意連接表的記錄,即使其他連接表中沒有匹配項(xiàng)。