使用内部联接更新未更新

pdtvr36n  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(327)

我正在尝试将影响值从旧表(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连接查询

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秒)
你知道为什么不更新记录吗?

ufj5ltwl

ufj5ltwl1#

执行updatejoin查询时;如果联接不是1:1,则不定义赋值的源。
在这种特殊情况下,由于a.x!=b、 在x条件下,更新创建了不同的连接对。如果没有这个条件,假设的1:1是不成立的。

相关问题