2017-04-07 28 views
0

我有很多表格,比如Customer-Age,Customer-Street,...,Customer-OtherField。我想把它們輕鬆地放到一張桌子上,例如Customer-Age-Street -... - OtherField。我已經目前使用:SQL Server:使用相同ID連接多個表的簡便方法?

SELECT a.Customer, a.Age, b.Street,..., x.OtherField 
FROM table1 a, table2 b,..., tableX x 
WHERE a.Customer=b.Customer =c.Customer=d.Customer =... =x.Customer`. 

我想更簡單,更便捷的方式加入共同標識符,Customer表。

如何在SQL Server 2014中方便地連接多個具有公共標識符的表?

+2

沒有。實際上你應該通過'join ... on ...'來更加明確地表達出你的聯結,並且在不同的表格中有年齡等等 - 我沒有看到這一點,但可能是因爲模糊的例子 –

+0

,這可能是明顯的,但是如果你不想寫所有的連接,你可以使用創建視圖UI並選擇表,它應該根據表選擇自動生成查詢 – TheUknown

回答

4

你現在這樣做的方式是最「方便」的,但它不是最優的,可能會讓你頭痛不已。太容易意外地做一個交叉連接,它會讓你的條件變得混亂起來,造成一堆不必要的條件。

一個更好的選擇是使用JOIN ON語法:

SELECT a.Customer, a.Age,b.Street,...,x.OtherField 
FROM 
table1 a 
INNER JOIN table2 b ON a.Customer = b.Customer 
INNER JOIN table3 c ON b.Customer = c.Customer 
INNER JOIN tableX x on c.Customer = x.Customer 

這清理你的代碼,使得它更容易告訴你要加入什麼,而不是找出哪些WHERE條款語句是用於連接表並限制查詢結果。無論輸入什麼都不麻煩,只是將所有這些字母放在不同的地方。

+1

請注意,你並不總是需要使用表別名('a,b ,在你的例子中x')。我認爲應該始終使用原來的名字,除非有令人信服的理由不要。 – Dai

+0

@戴好點。習慣的力量,在我們的內部編碼標準中,我們必須每次都使用表格的完全限定名稱,除非我們使用別名。所以你別名保護你的手腕和你的理智。 :) – mallan1121

+0

爲什麼這是一項政策? DBMS足夠聰明,可以正確綁定名稱,即使它不是完全限定的(假設您的意思是「{schemaName}。{tableName}」) - 如果您有意製作一個十字架,則只需指定模式名稱-schema參考。我知道有一個貨運崇拜者認爲查詢編譯在模式限定的名稱上更快,但我還沒有看到基準來支持這個概念。我希望你不必使用'{databaseName}。{schemaName}。{tableName}'來指定它們 - 那真是太糟糕了。 – Dai

0

SELECT t.Customerid,t1.Age,t1.Street,t2.number FROM表AS噸 INNER JOIN表1爲T1 ON t.Customer = t1.Customer INNER JOIN table2中爲T2 ON t1.Customer = t2.Customer

這基本上是乾淨的方式來做到這一點我會說。別名是非常重要的,因爲它們通常用於使列名更具可讀性,而且如果您有多個表,它們可以避免任何混淆。