我有两个表“OEHR_Orders”和“OEHR_Customers”。
客户和订单都有链接的Customer_ID。 我现在想要显示7月或8月份没有购买任何东西的所有客户。这是我的问题:
SELECT DISTINCT C.CUST_LAST_NAME ||'.'||SUBSTR(C.CUST_First_Name,1,1) AS "Name"
FROM OEHR_Customers C INNER JOIN OEHR_ORDERS O
ON C.Customer_ID = O.Customer_ID
WHERE EXTRACT(MONTH FROM O.Order_Date) NOT BETWEEN '7' and '8'
不幸的是,这个查询并没有给我想要的结果。
一些想法?
答案 0 :(得分:1)
SELECT DISTINCT CUST_LAST_NAME ||'.'||SUBSTR(CUST_First_Name,1,1) AS "Name"
FROM OEHR_Customers
WHERE Customer_Id not in (Select Customer_ID from OEHR_ORDERS
WHERE EXTRACT(MONTH FROM Order_Date) NOT BETWEEN '7' and '8')
答案 1 :(得分:0)
我倾向于使用GROUP BY
和HAVING
:
SELECT C.CUST_LAST_NAME || '.' || SUBSTR(C.CUST_First_Name, 1, 1) AS "Name"
FROM OEHR_Customers C INNER JOIN
OEHR_ORDERS O
ON C.Customer_ID = O.Customer_ID
GROUP BY C.CUST_LAST_NAME || '.' || SUBSTR(C.CUST_First_Name, 1, 1)
HAVING SUM(CASE WHEN EXTRACT(MONTH FROM O.Order_Date) BETWEEN 7 and 8
THEN 1 ELSE 0 END) = 0;
HAVING
子句计算出现第7个月和第8个月的次数。然后它过滤掉在这几个月内购买的客户。
您的查询版本只会让那些购买的客户不在这几个月内。