当特定引用存在多行时,返回单行



我的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';

您的示例结果具有其他列。 但是,这些似乎与您的问题无关。

最新更新