2017-10-28 77 views
1

我一般在MySQL和數據庫上總是noob,但我試圖通過創建一些虛構的數據庫來改善它。 我正在嘗試使用JOIN查詢從4個不同的完全填充的表中提取數據。使用:對於填充的整個表,SQL查詢返回空值

SELECT orders.OrderID,orders.customerID,orders.orderdate,orders.notes, Customer.*, orderitem.qty, donut.* 
FROM Customer INNER JOIN OrderItem 
Left Join orders ON customer.customerID = orders.orderID 
AND orders.orderID = orderitem.OrderID 
Left JOIN donut ON orderitem.donutID = donut.donutID 
WHERE orders.customerID = 002 or customer.customerID = 001 ; 

使用此,我從我的「訂單」表中有4列的所有NULLS。這些列中的每一列都有數據。我知道(我認爲)它與「從客戶內部連接訂單項 左加入訂單ON customer.customerID = orders.orderID」的問題,因爲如果將其切換到右連接,它填充「訂單」表信息,並使所有其他表返回NULLS。我只是完全喪失。

回答

2

這是一個不太可能的join條件:

ON customer.customerID = orders.orderID 

你大概的意思是:

ON customer.customerID = orders.CustomerID 

因爲你在看訂單信息,我建議內部連接:

SELECT o.OrderID, o.customerID, o.orderdate, o.notes, c.*, oi.qty, d.* 
FROM Customer c INNER JOIN 
    orders o 
    ON c.customerID = o.customerID INNER JOIN 
    OrderItem oi 
    ON o.orderID = oi.OrderID LEFT JOIN 
    donut d 
    ON oi.donutID = d.donutID 
WHERE c.customerID IN ('001', '002'); 

我不知道如何甜甜圈適合,所以這仍然是一個left join。我把客戶ID放在單引號中。如果有前導零,那麼它們可能是字符串。

+0

廢話。這完全解決了它,你的第一個建議。我可以發誓我嘗試過。謝謝。我確實嘗試了第二個代碼建議,並返回一個空集。但是再次感謝你! – Talenus

+0

@Talenus原來的連接條件中的錯誤也在第二個建議中,在這裏,所以我懷疑'ON c.customerID = o.orderID'的意圖是'ON c.customerID = o.customerID'。 –