ОБНОВЛЕНИЕ с INNER JOIN не обновляется - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь перенести значение воздействия из старой таблицы (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 голосов
/ 31 августа 2018

при выполнении запросов UPDATE JOIN; если соединение не 1: 1, источник присвоенного значения не определен.

В этом конкретном случае, хотя соединение было технически 1: 1 из-за условия a.x! = B.x, обновление создало разные пары соединений. 1: 1, которое предполагалось без этого условия, не соответствует действительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...