Является ли следующий стандартный SQL-совместимый? Если нет, то почему?Является ли обновление со стандартным стандартом присоединения
UPDATE a
SET a.Y = 2
FROM TABLE_A a
INNER JOIN TABLE_B b ON
a.X = b.X
WHERE b.Z = blahblah
Является ли следующий стандартный SQL-совместимый? Если нет, то почему?Является ли обновление со стандартным стандартом присоединения
UPDATE a
SET a.Y = 2
FROM TABLE_A a
INNER JOIN TABLE_B b ON
a.X = b.X
WHERE b.Z = blahblah
Упругодеформируемый способ ANSI написать запрос является:
UPDATE TABLE_A
SET Y = 2
WHERE b.Z = blahblah AND
EXISTS (SELECT 1 FROM TABLE_B b WHERE TABLE_A.X = b.X);
Насколько мне известно, ни ANSI ни ISO обеспечивают рациональную основу для почему они не сделать что-то. Я мог бы предположить, что в предложении FROM
возникают проблемы при наличии нескольких совпадений в данной строке. Лично я не хотел бы быть в комнате во время споров о том, какой заказ обновления происходят.
Нет, это не соответствует стандарту. В определении оператора UPDATE в стандарте SQL нет FROM. Зачем? Потому что он не был указан. –
@a_horse_with_no_name увеличил комментарий, поскольку он поднял улыбку - хотя ответ «почему бы и нет ... просто потому, что это не так» обычно не помогает. Я понимаю, что ответ может быть просто ударом в темноте, поскольку определенная причина в том, почему X включен, но Y это не просто предположение ... но меня интересуют возможные причины. – whytheq
Это не ANSI-совместимый (почему бы и нет, вы должны спросить комитет ANSI). См. Этот ответ для методов ANSI и ANSI. Http://stackoverflow.com/questions/1293330/how-can-i-do-an-update-statement-with-join-in-sql –