Jam*_*son 3 mysql sql sql-delete
我有两张桌子:
listings(item_id, ...)
images(item_id, ...)
Run Code Online (Sandbox Code Playgroud)
两个表中的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)
Run Code Online (Sandbox Code Playgroud)
但在我搞砸之前,想确认这是否正确?
您应该使用子查询
DELETE FROM images WHERE item_id NOT IN(SELECT item_id FROM listings)
Run Code Online (Sandbox Code Playgroud)
更多例子和解释.
这是处理这些微妙情况的好方法:
在运行可能导致严重损害的查询(如果未正确写入)之前,请使用SELECT替换DELETE/UPDATE以查看查询将影响哪些行.在你的情况下,它将是:
SELECT *
-- DELETE
FROM images WHERE item_id NOT IN (SELECT item_id FROM listings)
Run Code Online (Sandbox Code Playgroud)
当然,您还希望在发出此类命令之前通过备份数据库来覆盖自己.即使您的查询在SELECT测试中看起来正确,您也永远不会知道......
| 归档时间: |
|
| 查看次数: |
5427 次 |
| 最近记录: |