我有一个数据库,其中article.cat_id
链接到category.id
。返回表中cat_id不能在其他表中找到的所有行
我从category
除去几排,现在我要选择或article
在category
不存在链接到id
删除所有行。不幸的是,我不知道哪个id
已被删除。
是否有SQL方法检查以返回article
中的所有行,其中没有category.id
等于article.cat_id
?
我有一个数据库,其中article.cat_id
链接到category.id
。返回表中cat_id不能在其他表中找到的所有行
我从category
除去几排,现在我要选择或article
在category
不存在链接到id
删除所有行。不幸的是,我不知道哪个id
已被删除。
是否有SQL方法检查以返回article
中的所有行,其中没有category.id
等于article.cat_id
?
例如
SELECT * FROM Table_1 where Table_1.ID not in (SELECT Table_2.ID FROM Table_2)
内选择它将选择所有从表2的ID,而外部选择它将基地返回的行,其中该ID不表2
DELETE a.*
FROM article a
LEFT JOIN category c
ON a.cat_id = c.id
WHERE c.id IS NULL
存在
先将DELETE
改为SELECT
先确定它是你想要的。
这应该是DELETE a而不是DELETE a。*' - ':)' –
实际上,'a。*'也是允许的。该文档说'tbl_name [。*] [,tbl_name [。*]] ...' – Barmar
delete a
from article a
left outer join category c on c.id = a.cat_id
where c.id is null
如果你添加一些解释这个答案,我愿意接受它;) – Keelan
@CamilStaps:完成图片:这只会正常工作,如果有在ID列没有'NULL'值table_2 –
@a_horse_with_no_name啊,这是一个很好的说明,谢谢。在这种情况下,它是一个带主键和自动增量的int,所以不会有NULL值,但对于未来的用户来说这是一个好消息! – Keelan