Когда я делаю обновление с внутренними объединениями, изменение столбцов предложения 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.