6

我最近开始使用表之间的关系,当我尝试连接 2 时,我发现有些 ID 的外键不存在。

对于这个问题,假设我有带有 id 和名称的餐馆表,以及带有 id rest_id 的菜单表,它是餐馆表的外键。

我想删除所有在restaurants 表中不存在的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 子句中指定目标表“菜单”进行更新。

请注意,子查询确实返回了餐厅表中不存在的 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在子查询中创建:

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