6

最近、テーブル間のリレーションの使用を開始しました。2 を接続しようとすると、存在しない外部キーを持つ ID がいくつかあることがわかりました。

この問題では、id と名前を持つレストラン テーブルと、レストラン テーブルからの外部キーである ID rest_id を持つメニュー テーブルがあると仮定します。

restaurant テーブルに存在しない rest_id を持つすべてのメニューを削除したい。

私はこれを使用しました:

DELETE FROM `Menus` WHERE restid IN (SELECT DISTINCT `restid` from 
   `Menus` M left join `Eng_Restaurants` ER on M.`restid` = ER.`ID`
where ER.`ID` is null)

しかし、次のエラーが発生しました: #1093 - FROM 句での更新にターゲット テーブル 'Menus' を指定できません。

サブクエリは、restaurants テーブルに存在しない ID を返すことに注意してください。

(SELECT DISTINCT `restid` from 
       `Menus` M left join `Eng_Restaurants` ER on M.`restid` = ER.`ID`
    where ER.`ID` is null)

何か案は?

4

1 に答える 1

16

JOINサブクエリでa を作成する必要はありません。

DELETE FROM Menus
WHERE restid NOT IN (SELECT id FROM Eng_Restaurants)
于 2013-10-26T11:14:58.647 に答える