2015-08-28 5 views
1

Является ли следующий стандартный 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 
+3

Нет, это не соответствует стандарту. В определении оператора UPDATE в стандарте SQL нет FROM. Зачем? Потому что он не был указан. –

+0

@a_horse_with_no_name увеличил комментарий, поскольку он поднял улыбку - хотя ответ «почему бы и нет ... просто потому, что это не так» обычно не помогает. Я понимаю, что ответ может быть просто ударом в темноте, поскольку определенная причина в том, почему X включен, но Y это не просто предположение ... но меня интересуют возможные причины. – whytheq

+0

Это не ANSI-совместимый (почему бы и нет, вы должны спросить комитет ANSI). См. Этот ответ для методов ANSI и ANSI. Http://stackoverflow.com/questions/1293330/how-can-i-do-an-update-statement-with-join-in-sql –

ответ

2

Упругодеформируемый способ 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 возникают проблемы при наличии нескольких совпадений в данной строке. Лично я не хотел бы быть в комнате во время споров о том, какой заказ обновления происходят.

Смежные вопросы