我有两张桌子:
listings(item_id, ...)
images(item_id, ...)
两个表中的item_id值相同 - 但是我从'listing'表中删除并删除了列表,而没有删除'images'表中的相应行。
所以 - 我想删除第二个'images'表中的所有行,如果IMAGES中的item_id与我的主'listing'表中的任何更新的item_id值不对应。
如何删除'images'表中未从'listing'引用的所有记录?
我一直在试验SQL脚本和子查询,如下所示:
DELETE FROM images WHERE item_id IN
(SELECT item_id FROM images EXCEPT SELECT item_id FROM listings)
但在我搞砸之前,想确认这是否正确?
答案 0 :(得分:9)
您应该使用子查询
DELETE FROM images WHERE item_id NOT IN(SELECT item_id FROM listings)
答案 1 :(得分:7)
这是处理这些微妙情况的好方法:
在运行查询之前,如果未正确写入可能会造成重大损害,请使用SELECT替换DELETE / UPDATE以查看查询将影响哪些行。在你的情况下,它将是:
SELECT *
-- DELETE
FROM images WHERE item_id NOT IN (SELECT item_id FROM listings)
当然,您还希望在发出此类命令之前通过备份数据库来覆盖自己。即使您的查询在SELECT测试中看起来正确,您也永远不会知道......
答案 2 :(得分:4)
这样可行,或IN
条款。
DELETE
FROM image
WHERE item_id NOT IN (SELECT item_id FROM listings)
答案 3 :(得分:1)
对我而言,更清楚地说
DELETE FROM images WHERE item_id NOT IN
(SELECT item_id FROM listings)