我不使用using語法,因爲
- 我的大部分的連接並不適合它(不是被匹配的相同的字段名,和/或多個匹配的連接)和
- 它不是立即明顯它轉化爲與兩個以上的表
即假設有「身份證」和「ID_2」列3代表的情況下,確實
T1 JOIN T2 USING(id) JOIN T3 USING(id_2)
成爲
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)
或
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)
還是其他什麼東西來着?
對於某個特定的數據庫版本來說,這是一個相當簡單的練習,但我沒有很大的信心認爲它在所有數據庫中都是一致的,並且我不是唯一一個必須維護我的代碼(所以其他人也必須知道它相當於什麼)。
與其中Vs上的明顯的區別是如果連接是外:
假定T1與單個ID字段,包含值1,並用ID和值字段一個T2一行(一個行,ID = 1,VALUE = 6),則我們得到:
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42
沒有給出的行中,由於在需要進行匹配,而
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)
會給一行與所述值
1, NULL, NULL
由於ON僅用於匹配連接,因爲連接是可選的,因爲它是外部連接。列
只是出於興趣你使用的數據庫是什麼?我只是嘗試了SQL Server上的USING語法,它似乎不起作用。 – 2008-12-16 16:13:36
我正在使用MySQL – Pyrolistical 2008-12-16 17:47:05