当存在多个行作为特定参考时,返回单个行

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

我尝试了SELECT DISTINCT,但无济于事,因此将不胜感激任何帮助/指针。

jyyzc0106 回答:当存在多个行作为特定参考时,返回单个行

  

我只希望只购买产品“ 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';

您的样本结果还有其他列。但是,这些似乎与您的问题无关。

本文链接:https://www.f2er.com/2978041.html

大家都在问