我的SQL技能因不使用而生锈,想向以下方面寻求一些帮助。
我有一个产品表、一个客户表和一个订单参考表。客户可以在同一订单参考中订购 1 个或多个产品。
我编写的 SQL 查询是:
SELECT O.ORDER_REF, P.Product, C.Name
FROM PRODUCTS AS P
INNER JOIN ORDER_REFS AS O ON P.ORDER_REF = O.ORDER_REF
INNER JOIN CUST AS C ON P.ORDER_REF = C.ORDER_REF
WHERE P.PROD_CODE =`A`
AND P.ORDER_DATE = '2019-11-01'
ORDER BY O.APP_REF ASC;
我只想要购买产品"A"的客户。 我上面查询的结果提供了所有订购"A"的人,还包括 A&B 和 A&C 等。
表 O 是这样的,其中每个ORDER_REF都有多行:
ORDER_REF PRODUCT NAME
1 | A | Mr X
1 | B | Mr X
2 | A | Mr Y
3 | A | Mr T
4 | A | Mr S
5 | A | Mr W
5 | C | Mr W
我想要的结果将显示以下内容,因为他们只购买了"A"
ORDER_REF PRODUCT NAME
2 | A | Mr Y
3 | A | Mr T
4 | A | Mr S
我已经尝试过选择独特,但无济于事,因此任何帮助/指针将不胜感激。
我只想要购买产品"A"的客户。
使用聚合和having
:
SELECT C.Name
FROM PRODUCTS P INNER JOIN
ORDER_REFS O
ON P.ORDER_REF = O.ORDER_REF INNER JOIN
CUST C
ON P.ORDER_REF = C.ORDER_REF
WHERE P.ORDER_DATE = '2019-11-01'
GROUP BY C.NAME
HAVING MIN(P.PROD_CODE) = 'A' AND MAX(P.PROD_CODE) = 'A';
您的示例结果具有其他列。 但是,这些似乎与您的问题无关。