使用INNER JOIN的更新未更新

时间:2018-08-31 18:16:18

标签: mysql sql-update inner-join

我正在尝试将影响值从旧表(esp)转移到新表(esm)。两个表都具有相似的结构:

esp
+--------+------+----------------------------
|codeNorm|impact|Other columns i dont care...
+--------+------+----------------------------

esm
+--------------+------+--------------------------------------
|codeMasterNorm|impact|Other different columns i dont care...
+--------------+------+--------------------------------------

首先,我创建了一个SELECT查询,该查询仅带来在它们之间具有不同影响的记录(影响可以为NULL):

SELECT esm.codeMasterNorm, esm.impact, esp.codeNorm, esp.impact FROM esm
INNER JOIN esp ON esp.codeNorm = esm.codeMasterNorm AND IFNULL(esp.impact, 0) <> IFNULL(esm.impact, 0);

此返回:

  

组163行(0.75秒)

然后我创建了UPDATE / INNER JOIN查询

UPDATE esm
INNER JOIN esp ON esp.codeNorm = esm.codeMasterNorm AND IFNULL(esp.impact, 0) <> IFNULL(esm.impact, 0)
SET esm.impact = esp.impact;

此返回:

  

查询正常,受影响的163行(1.35秒)匹配的行:163已更改:163   警告:0

但是当我再次重新运行SELECT查询时,这将返回相同的结果:

  

已设置163行(1.25秒)

关于为什么不更新记录的任何想法?

1 个答案:

答案 0 :(得分:1)

执行UPDATE JOIN查询时;如果联接不是1:1,则未定义分配值的来源。

在这种特殊情况下,由于a.x!= b.x条件,联接在技术上为1:1,但此更新创建了不同的联接对。假设没有这种条件的1:1是不正确的。