Когда я делаю обновление с внутренними объединениями, изменение столбцов предложения ON влияет на обновление? - PullRequest
0 голосов
/ 28 июня 2018

Например, если у вас есть этот запрос:

UPDATE table1 
INNER JOIN table2 ON table1.id = table2.id 
SET table2.id = table1.idSetting 
WHERE table2.property IS NULL

Вы можете заметить, что идентификатор table2 изменяется, когда table2.property имеет значение null, мой вопрос: повлияет ли это на "затронутые строки" во время выполнения запроса.

Я делаю этот вопрос, потому что я пытаюсь выполнить обновление, подобное этому, которое требует обновления некоторых столбцов, которые находятся во внутренних предложениях соединения, но предлагается, что повлияет на 36000 строк, но в конечном итоге повлияет только на 4500 строк.

Спасибо.

1 Ответ

0 голосов
/ 28 июня 2018

Затронутые строки учитываются как те строки, которые действительно были изменены на другое значение в результате обновления. Если у них уже есть значение, которое вы им задаете, они не считаются «затронутой» строкой.

Вы можете проверить:

SELECT COUNT(*) FROM table1 
INNER JOIN table2 ON table1.id = table2.id 
WHERE table2.property IS NULL

Вышеуказанное возвращает 36000 или 4500? Он должен вернуть 36000, если количество строк соответствует условиям.

SELECT COUNT(*) FROM table1 
INNER JOIN table2 ON table1.id = table2.id 
WHERE table2.property IS NULL
AND table2.id <> table1.idSetting

Принимая во внимание, что может вернуться 4500.

...