使用Join更新Orphan记录

时间:2016-02-05 23:05:56

标签: mysql join sql-update

我有两张桌子如下。理想情况下Table2.C1Table1.C1的外键,但是最初没有设置外键。我们现在无法设置外键,因为Table2中存在一些孤立记录。我们希望将这些孤立记录列更新为NULL。

注意:我不想使用任何子/嵌套查询

Table1
--------
| C1   |
--------
| 1    |
| 2    |
| 3    |
| 4    |
|------|

Table2
---------------
| C1   |  C3  |
---------------
| 1    |  A   |
| 1    |  B   |
| 8    |  C   |
| 9    |  D   |
| 2    |  E   |
|------|------|

我想为记录Table2.C18更新9为NULL。

2 个答案:

答案 0 :(得分:0)

您可以使用如下查询:

UPDATE Table2 SET C1 = NULL WHERE C1 NOT IN ( SELECT Table1.C1 FROM Table1 )

注意:SQL优化器应该通过使用JOIN运算符来优化此查询。因此,对于这样的简单查询,您使用嵌套子查询或通过连接是不重要的:

UPDATE Table2 SET C1 = NULL FROM Table2 
LEFT JOIN Table1 ON Table2.C1 = Table1.C1 
WHERE Table1.C1 IS NULL

大表查询的执行计划应该是相同的

答案 1 :(得分:0)

我没有看到你如何在没有子查询的情况下这样做,因为你不能在table1中对不存在的行进行JOIN ...