我是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 ;
使用它,我从有 4 列的"订单"表中获取所有 NULL。其中每一列都有数据。
我知道(我认为)这是"来自客户内部加入订单项目"的问题左联接订单 ON 客户.客户ID = 订单.订单 ID",因为如果将其切换到右联接,它会填充"订单"表信息,并使所有其他表返回 NULL。我完全不知所措。
不太可能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 放在单引号中。 如果有前导零,那么它们可能是字符串。