我正在尝试将影响值从旧表(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秒)
关于为什么不更新记录的任何想法?
答案 0 :(得分:1)
执行UPDATE JOIN查询时;如果联接不是1:1,则未定义分配值的来源。
在这种特殊情况下,由于a.x!= b.x条件,联接在技术上为1:1,但此更新创建了不同的联接对。假设没有这种条件的1:1是不正确的。