SQL Query为填充的整个表返回Null

时间:2017-10-28 23:44:53

标签: mysql sql left-join

我一般都是MySQL和数据库的总菜鸟,但我试图通过创建一些虚构的数据库来改善它。 我试图使用JOIN查询从4个不同的,完全填充的表中提取数据。使用:

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  ;

使用这个,我从我的"命令"获得所有NULLS。表有4列。这些列中的每一列都包含数据。

我知道(我认为)这是" FROM Customer INNER JOIN OrderItem的一个问题 左连接订单ON customer.customerID = orders.orderID"因为如果将它切换到右连接,它会填充"命令"表信息,并使所有其他表返回NULLS。我只是完全失去了。

1 个答案:

答案 0 :(得分: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放在单引号中。如果有前导零,则它们可能是字符串。