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

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

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

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

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

Благодарю.

1 ответ

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

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

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.

Другие вопросы по тегам