如果这些重复的行与另一个表中的行相关联,如何在SQLite中删除具有相同名称的重复的数据库表行?

时间:2019-12-09 16:42:34

标签: sql sqlite

我有两个桌子。 1.餐厅,2.menuItems。 menuItems行使用其主键作为外键与餐厅关联。现在,我有一些同名的餐厅,除了一个餐厅外,我想删除它们,我也要删除menuItems表中的关联项目。如何使用sqlite查询做到这一点?我没有成功尝试,但是语法错误。

Delete  FROM restaurant inner join menu_item  on restaurant.id=menu_item.restaurant_id
WHERE name NOT IN (SELECT min(name)
                    from restaurant
                    group by id)

1 个答案:

答案 0 :(得分:1)

SQLite不支持带有联接的DELETE语句。
此查询:

select min(id)
from restaurant
group by name;

返回您将删除的所有餐厅ID(保留每个名称的最低id)。
因此,使用它删除menu_item中具有其他restaurant_id的所有行:

delete from menu_item
where restaurant_id not in (select min(id) from restaurant group by name);

,并从restaurant中删除具有其他id的所有行:

delete from restaurant
where id not in (select min(id) from restaurant group by name);


如果您在restaurant_id中使用选项menu_item定义了外键ON DELETE CASCADE,则将自动完成从menu_item删除行的步骤。
在此处阅读更多信息:SQLite Foreign Key