如何使用 SQL 單語句從多張表中刪除數(shù)據(jù),即使其中一張表沒有匹配項(xiàng)?

如何使用 SQL 單語句從多張表中刪除數(shù)據(jù),即使其中一張表沒有匹配項(xiàng)?

sql單語句實(shí)現(xiàn)多表刪除

此處要實(shí)現(xiàn)通過單一語句從三張表中刪除相關(guān)記錄,目標(biāo)是通過dishid執(zhí)行刪除操作。

提供的初始sql語句中,使用了inner join連接三個(gè)表,但由于第三張表沒有任何匹配記錄,導(dǎo)致前兩張表的數(shù)據(jù)未被刪除。

正確的改進(jìn)方式是使用left join連接,即使第三張表沒有匹配記錄,也能刪除前兩張表中的數(shù)據(jù)。修改后的sql語句如下:

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 );

此語句將根據(jù)dishid在所有三張表中刪除相關(guān)記錄,無論其中哪張表存在要?jiǎng)h除的數(shù)據(jù)。

值得注意的是,inner join和left join之間的區(qū)別在于,inner join僅匹配同時(shí)在所有連接表中找到匹配項(xiàng)的記錄,而left join將返回所有匹配任意連接表的記錄,即使其他連接表中沒有匹配項(xiàng)。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享