对于填充的整个表,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放在单引号中。如果有前导零,那么它们可能是字符串。
废话。这完全解决了它,你的第一个建议。我可以发誓我尝试过。谢谢。我确实尝试了第二个代码建议,并返回一个空集。但是再次感谢你! – Talenus
@Talenus原来的连接条件中的错误也在第二个建议中,在这里,所以我怀疑'ON c.customerID = o.orderID'的意图是'ON c.customerID = o.customerID'。 –