2013-06-01 26 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 
相關問題