2009-07-27 78 views
1

我錯過了什麼?我需要返回與Last_Name Query相匹配的所有記錄,而不管Field_Table中是否有客戶編號。SQL四個表一個記錄集

我打電話給客戶端表兩次,因爲每個客戶端ID都有一個其聯繫電話號碼爲0的家長。我需要父記錄來返回城市,州,郵編和公司名稱。

我試着循環與recordset.movenext但查詢變得非常緩慢,這使循環不受歡迎。

如何查詢客戶表以在客戶編號可用時包含客戶編號並在缺失時返回?

當前結果是匹配Last_Name查詢和DO具有customer_number的記錄。我沒有得到任何與last_name查詢匹配但沒有客戶編號的記錄。

注意:如果公司沒有號碼,則公司在Field_Table中沒有記錄。

SELECT A.Contact, 
     A.Id, 
     A.First_Name, 
     A.Last_Name, 
     B.Company_Name, 
     B.City, 
     B.State, 
     FT.Number 
FROM Client C 
    INNER JOIN Client B ON A.Id = B.Id 
    LEFT OUTER JOIN Field_Table FT ON B.Id = FT.Id 
    LEFT OUTER JOIN Field_Definitions FD ON FT.Type_Id = FD.Type_Id 
WHERE (A.Last_Name LIKE '%Last Name%') 
    AND (B.Contact = 0) 
    AND (FD.Description = 'Customer Number') 

回答

1

您需要將FD.Description部分放在ON連接條件中,而不是在WHERE子句中。

SELECT A.Contact, A.Id, A.First_Name, A.Last_Name, B.Company_Name, B.City, B.State, FT.Number 
FROM Client C 
INNER JOIN Client B ON A.Id = B.Id 
LEFT OUTER JOIN Field_Table FT ON B.Id = FT.Id 
LEFT OUTER JOIN Field_Definitions FD ON (FT.Type_Id = FD.Type_Id) AND (FD.Description = 'Customer Number') 
WHERE (A.Last_Name LIKE '%Last Name%') AND (B.Contact = 0) 
+0

非常感謝您的快速回復。在努力合併您的建議時,Quassnoi給我提供了我期待的答案。再次感謝您的支持。 – Jason 2009-07-27 18:36:45

0
SELECT A.Contact, 
     A.Id, 
     A.First_Name, 
     A.Last_Name, 
     B.Company_Name, 
     B.City, 
     B.State, 
     FT.Number 
FROM Client C 
INNER JOIN 
     Client B 
ON  B.Id = A.id 
     AND B.contact = 0 
INNER JOIN 
     Field_Definitions FD 
ON  FD.Description = 'Customer Number' 
LEFT OUTER JOIN 
     Field_Table FT 
ON  FT.Type_Id = FD.Type_Id 
     AND FT.id = B.Id 
WHERE A.Last_Name LIKE '%Last Name%' 
+0

我現在只是哭了。 Quassnoi,你的解決方案非常完美。 非常感謝! – Jason 2009-07-27 18:38:24

0

現在你明白爲什麼你不能把參考表左側的右側加入了where子句中?原因在於將它放入where子句中將聯接轉換爲內部聯接,因爲where條件必須滿足所有記錄。任何時候使用左連接時,唯一可以工作並保留連接的引用是您正在查找空記錄的那個空記錄,然後將其中的其他連接的記錄提供給不在引用表中的記錄。