是否使用符合联接标准sql的更新

是否使用符合联接标准sql的更新,sql,sql-server,ansi-sql,sql-standards,Sql,Sql Server,Ansi Sql,Sql Standards,以下标准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 TABL

以下标准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
子句会导致问题。就个人而言,我不想在讨论更新的顺序时呆在房间里。

不,这不符合标准。SQL标准中UPDATE语句的定义中没有FROM。为什么?因为它没有被指定。@一匹没有名字的马笑了笑,加了一句话-虽然回答“为什么不…仅仅因为它不是”通常没有帮助。我意识到答案可能只是暗中捅了一刀,因为明确的原因是为什么X被包括在内,而Y不是,这只是一个假设。。。但我对可能的原因很感兴趣。它不符合ANSI标准(至于为什么不符合,你得问问ANSI委员会)。有关ANSI和非ANSI方法,请参见此答案