【发布时间】:2020-02-22 04:15:11
【问题描述】:
我不确定为什么我的大脑现在无法处理这个问题,但看起来这将是一个很容易编写的查询。
我有 2 张桌子:
- Orders
(pk)orderID
customername
orderDate
- OrderDetails
(pk)detailsID
orderID
productName
因此,当下新订单时,订单中会添加一行客户信息,并在 orderDetails 表中为订购的每个产品添加一行。
想象一下这两种布局:
ORDERS
orderID customerName orderDate
1 John Smith 2/21/2020
2 Bill Adams 2/21/2020
3 Susan Conrad 2/21/2020
4 Amy Fetcher 2/21/2020
ORDERDETAILS
detailsID orderID productName
1 1 pillow
2 1 mattress
3 2 pillow
4 3 sheets
5 3 headboard
6 3 mattress
7 4 pillow
8 4 framed art
9 4 decals
10 4 plant stand
在我的查询中,我想从日期 = 今天的订单中选择所有。我加入 ORDERDETAILS 表是因为我想知道我在结果中售出枕头的任何时间。
我只想在结果中显示每个订单的 1 行,例如,在 orderID 1 中,他们订购了枕头和床垫。在该行的 productName 下的结果中,我希望它显示枕头。
如果有人没有订购枕头,我今天仍然需要为他们的订单显示该行,并且在 productName 下,如果不是枕头,我不在乎它显示什么。它不能显示任何内容或他们订购的其他产品名称之一。
我知道这行不通:
SELECT ORDERS.*, ORDERDETAILS.*
FROM ORDERS INNER JOIN ORDERDETAILS ON ORDERS.orderID = ORDERDETAILS.orderID
WHERE productName = "pillow"
我不确定我是否需要子查询或某种外部左连接可能两者都需要?
非常感谢任何帮助,谢谢!
【问题讨论】:
-
我刚刚发现了 SQL 案例语句:mode.com/sql-tutorial/sql-case,如果得到正确的结果,这对我来说可能是最简单的方法,现在就试试吧!
-
嗯,这是一个很酷的功能,但不是我想要的