Join
對兩個連接表的查詢
我有 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 建議的那樣,級聯刪除也可以。