Delete all rows which has no id existing in another table

醉酒当歌 提交于 2019-12-18 06:48:54

问题


I want to delete all rows which has no existing foreign key in another table example:

table1
+----+-------+
|id  | data  |
+----+-------+
| 1  | hi    |
+----+-------+
| 2  | hi    |
+----+-------+
| 3  | hi    |
+----+-------+
| 4  | hi    |
+----+-------+
| 5  | hi    |
+----+-------+

table2
+----+-------+
|a_id| data  |
+----+-------+
| 1  | hi    |
+----+-------+
| 20 | hi    |
+----+-------+
| 3  | hi    |
+----+-------+
| 40 | hi    |
+----+-------+
| 5  | hi    |
+----+-------+

The query will delete rows with id# 20 and 40 on table2.

I need to do this so that i could establish a relationship with table1 and table2.


回答1:


DELETE table2 
FROM   table2 
       LEFT JOIN table1 
              ON table2.a_id = table1.id 
WHERE  table1.id IS NULL 



回答2:


To sum up, there are tree ways to delete multi tables

  1. NOT IN(SELECT ...) - @someone (he had deleted his answer)

    Delete From Tab2 where ID not in (Select ID From Tab1)
    
  2. LEFT JOIN - @eggyal

    DELETE table2
    FROM   table2 LEFT JOIN table1 ON table2.a_id = table1.id
    WHERE  table1.id IS NULL
    
  3. NOT EXISTS

    DELETE
    FROM  table2
    WHERE NOT EXISTS (
      SELECT 1
      FROM table1
      WHERE table1.id = table2.a_id
    )
    

According to What's the difference between NOT EXISTS vs. NOT IN vs. LEFT JOIN WHERE IS NULL?, different RDBMS perform differently.



来源:https://stackoverflow.com/questions/20462374/delete-all-rows-which-has-no-id-existing-in-another-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!