2013-06-01 85 views
1

我有一个数据库,其中article.cat_id链接到category.id返回表中cat_id不能在其他表中找到的所有行

我从category除去几排,现在我要选择或articlecategory不存在链接到id删除所有行。不幸的是,我不知道哪个id已被删除。

是否有SQL方法检查以返回article中的所有行,其中没有category.id等于article.cat_id

回答

2

例如

SELECT * FROM Table_1 where Table_1.ID not in (SELECT Table_2.ID FROM Table_2) 

内选择它将选择所有从表2的ID,而外部选择它将基地返回的行,其中该ID不表2

+0

如果你添加一些解释这个答案,我愿意接受它;) – Keelan

+1

@CamilStaps:完成图片:这只会正常工作,如果有在ID列没有'NULL'值table_2 –

+0

@a_horse_with_no_name啊,这是一个很好的说明,谢谢。在这种情况下,它是一个带主键和自动增量的int,所以不会有NULL值,但对于未来的用户来说这是一个好消息! – Keelan

1
DELETE a.* 
FROM article a 
LEFT JOIN category c 
ON a.cat_id = c.id 
WHERE c.id IS NULL 
存在

先将DELETE改为SELECT先确定它是你想要的。

+0

这应该是DELETE a而不是DELETE a。*' - ':)' –

+1

实际上,'a。*'也是允许的。该文档说'tbl_name [。*] [,tbl_name [。*]] ...' – Barmar

0
delete a 
from article a 
left outer join category c on c.id = a.cat_id 
where c.id is null 
相关问题