我有两个桌子。 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)
答案 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