【问题标题】:Is an update with a join standard sql compliant是否符合加入标准 sql 的更新
【发布时间】:2015-08-28 09:35:00
【问题描述】:

是否符合以下标准 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语句的定义中没有FROM。为什么?因为没有指定。
  • @a_horse_with_no_name 提高了评论,因为它引起了微笑 - 尽管回答“为什么不......只是因为它不是”通常没有帮助。我意识到答案可能只是在黑暗中刺伤,因为明确的原因是为什么包含 X 而不是 Y 只是假设......但我对可能的原因感兴趣。
  • 它不符合 ANSI(至于为什么不符合,您必须询问 ANSI 委员会)。请参阅此答案以了解 ANSI 和非 ANSI 方法stackoverflow.com/questions/1293330/…

标签: sql sql-server ansi-sql sql-standards


【解决方案1】:

编写查询的符合 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 子句会导致问题。就个人而言,在争论更新发生的顺序时,我不想在房间里。

【讨论】:

    猜你喜欢
    • 2012-12-07
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2019-07-07
    • 2014-05-31
    • 2011-11-23
    相关资源
    最近更新 更多