2014-07-21 81 views
0

我有3個表看起來像這樣:加入3 SQL表

Table1: 
PersonSSN 
NumberOfCars 

Table2: 
PersonSSN 
NumberOfPhones 

Table3: 
PersonName 
PersonSSN 

表1與表2有一個外鍵參照表3的PersonSSN。

我需要以這樣的方式,我去參加這些: PERSONNAME NumberOfPhones NumberOfCars

這裏是適用於某些條件下,加入:

  1. 如果一個人有兩個表1中的條目和表2我看到爲他填充的所有3個字段。
  2. 如果一個人有表1中,而不是在表2,他仍然應該出現,但設置爲0
  3. 同樣NumberOfPhones項時,如果一個人在表2中的條目,而不是表1中的他應該仍然出現,但NumberOfCars設置爲0.

這可以在一個查詢中實現嗎?如果是,該查詢應該是什麼?

回答

6

這是一個left outer join查詢:

select t3.name, coalesce(t1.NumberOfPhones, 0), coalesce(t2.NumberOfCars, 0) 
from table3 t3 left outer join 
    table1 t1 
    on t3.ssn = t1.ssn left outer join 
    table2 t2 
    on t3.ssn = t2.ssn; 
+0

似乎並沒有得以順利。我錯過了Table2中但不在Table1中的人的數據。其他一切看起來不錯。 – Shan

+0

@Shan:請考慮提供一個[SQL小提琴測試用例](http://sqlfiddle.com/),演示該解決方案如何工作,因爲據我所知,它應該工作。 –

+0

@Shan。 。 。 'table3'中的所有'SSN'都是?如果'table3'沒有覆蓋兩個表中的全部人口,就會發生這種情況。 –