亚洲国产第一_开心网五月色综合亚洲_日本一级特黄特色大片免费观看_久久久久久久久久免观看

Hello! 歡迎來到小浪云!


如何通過單一語句刪除多張表中符合特定條件的記錄?


avatar
小浪云 2024-11-11 214

如何通過單一語句刪除多張表中符合特定條件的記錄?

通過單一語句實現多表刪除

本文將解決如何在sql語句中通過單一語句實現多表刪除。

問題

有一張dish表,一個dish_flavor表和一個setmeal_dish表。需要刪除dishid為51和52的所有記錄。但是,使用以下sql語句時,并沒有刪除相應記錄:

delete dish, dish_flavor, setmeal_dish  from dish, dish_flavor, setmeal_dish   where dish.id = dish_flavor.id and dish.id = setmeal_dish.id and dish.id in (51, 52);
登錄后復制

原因

此語句本質上等價于:

delete dish, dish_flavor, setmeal_dish  from     dish     join dish_flavor on dish.id = dish_flavor.id      join setmeal_dish on dish.id = setmeal_dish.id  where      dish.id in ( 51, 52 );
登錄后復制

由于第三張表中沒有符合條件的數據,因此不會刪除任何記錄。內連接要求三張表中都必須存在該id的記錄,才會刪除該記錄。

解決方案

如果希望當有任何一張表中存在要刪除的id時就進行刪除,可以使用左連接:

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 );
登錄后復制

這樣,即使第三張表中沒有數據,前兩張表中的數據仍然會被刪除。

相關閱讀