что произойдет, если подзапрос вернется
нет строк? Будет ли это делать обновление с
обнуляет?
Да - вы можете проверить это как:
update YourTable
set col1 = (select 1 where 1=0)
Это заполнит col1 пустыми значениями. Если подзапрос возвращает несколько строк, например:
update YourTable
set col1 = (select 1 union select 2)
База данных выдаст ошибку.
Во-вторых, есть ли лучший способ
напиши это. Я в основном обновляю
три поля в таблице A из таблицы B,
но обновление должно произойти только если
любое из трех полей отличается.
Интуитивно я бы не стал беспокоиться о производительности. Если вы действительно хотите избежать обновления, вы можете написать его следующим образом:
UPDATE a
SET x = b.x, y = b.y, z = b.z
FROM tableA a, tableB b
WHERE a.id = b.id AND (a.x <> b.x OR a.y <> b.y OR a.z <> b.z)
Предложение WHERE
запрещает обновления с NULL.