Join

對兩個連接表的查詢

  • December 29, 2016

我有 2 張桌子。第一個表是 feeds,(feeds.ID) 是主鍵。第二個表是項目。feeds.ID 與 items.feed_ID 相關,因此通過簡單的內部連接,我可以提取每個提要的數據。

現在,我刪除了一些提要,但沒有從項目表中刪除它們。我想在提要表上找到沒有資源的項目。另一方面,我想找到無用的物品。什麼是正確的查詢?

我試過這個:

select * from items where feed_id NOT IN 
   (select id from feeds 
       inner join items on feeds.id=items.feed_id group by feed_id) group by feed_id

但它顯示一個錯誤。

試試這個查詢:

select * from items where feed_id NOT IN (select id from feeds)

同時設置外鍵關係delete cascade。所以它也會從依賴表中刪除。

要查看帶有連接的孤立記錄:

select * 
 from Items i
 left join  Feeds f on f.ID = i.Feed_ID
where f.ID IS NULL

您還可以使用相同的邏輯刪除孤兒:

delete i
 from Items i
 left join  Feeds f on f.ID = i.Feed_ID
where f.ID IS NULL

為防止將來出現此問題,您應該將外鍵約束添加到 Items.Feed_ID 引用 Feed.ID。當您嘗試刪除父 Feed 記錄而不先刪除子 Item 記錄時,這會產生錯誤。正如 Praveen 建議的那樣,級聯刪除也可以。

引用自:https://dba.stackexchange.com/questions/19648