删除一个表中的值,该表的id在mysql中不存在

时间:2013-10-26 11:10:02

标签: mysql sql

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

对于这个问题,我们假设我有一个带有id和name的餐馆表,以及一个id为rest_id的菜单表,它是来自餐馆餐桌的外键。

我想删除所有菜单表中不存在的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)

有什么想法吗?

1 个答案:

答案 0 :(得分:10)

您不需要在子查询中创建JOIN

DELETE FROM Menus
WHERE restid NOT IN (SELECT id FROM Eng_Restaurants)