对于填充的整个表,SQL查询返回空值

问题描述:

我一般在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。我只是完全丧失。

这是一个不太可能的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'。 –