2013-02-02 205 views
2

我有3個表使用外鍵鏈接在一起。其中一個表包含的數據可能爲空,但我仍然希望顯示它。我也得到了多個條件中工作mySQL左加入多個表

這是我迄今爲止,但它不工作:

SELECT ord.OrdNo, ord.OrdDate, cu.CustNo, cu.CustFirstName, cu.CustLastName, em.EmpNo, em.EmpFirstName, em.EmpLastName 
FROM OrderTbl ord, Customer cu, Employee em 
WHERE cu.CustNo=ord.CustNo 
AND em.EmpNo=ord.EmpNo (+) 
AND (OrdDate BETWEEN '01-Jan-04' 
AND '31-Jan-04') 
AND cu.CustState = 'CO' 

基本上,員工信息可能是在順序表無效,但我仍然希望顯示條目。任何幫助將不勝感激,因爲我只開始學習SQL。

編輯:運行上述查詢時沒有錯誤。只是我錯過了有空字段的結果。

+0

如果在執行查詢時出現錯誤,請在此提及錯誤。 –

+0

如果您使用的是Oracle,請更正標籤。 –

回答

4

Pleaes使用JOINS,在你的情況下,LEFT精確JOIN來顯示所有僱員的訂單:

SELECT ord.OrdNo, ord.OrdDate, cu.CustNo, cu.CustFirstName, cu.CustLastName, 
em.EmpNo, em.EmpFirstName, em.EmpLastName 
FROM OrderTbl ord 
    LEFT JOIN 
    Customer cu 
    ON cu.CustNo=ord.CustNo 
    AND cu.CustState = 'CO' 
    LEFT JOIN 
    Employee em 
    ON em.EmpNo=ord.EmpNo 
WHERE OrdDate BETWEEN '2004-01-01' 
        AND '2004-01-31' 
; 

參考:

Visual Representation of JOINs:

enter image description here

+0

工作!非常感謝! – Cyrallia

+0

@Cyrallia glat你有它的工作':D'前進請看看'JOIN'如何使你的查詢高效和乾淨。 – bonCodigo

0
SELECT ord.OrdNo, ord.OrdDate, cu.CustNo, cu.CustFirstName, cu.CustLastName, em.EmpNo, em.EmpFirstName, em.EmpLastName FROM OrderTbl ord, Customer cu, Employee em WHERE cu.CustNo=ord.CustNo AND em.EmpNo=ord.EmpNo AND (ord.OrdDate BETWEEN 'YYYY-mm-dd' AND 'YYYY-mm-dd') AND cu.CustState = 'CO' 

YYYY -mm-dd在此支持條款之間。例如: - 從日期= 2013-01-01 迄今= 2013-01-31

嘗試這樣。可能它會幫助你。