2015-08-28 23 views
1

是否符合以下標準SQL?如果不是,那爲什麼不呢?是否符合加入標準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

不,它不符合標準。 SQL標準中UPDATE語句的定義中沒有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子句會導致問題。就我個人而言,我不想在關於更新發生的順序的爭論中進入房間。