选择所有不持有任何产品的客户

时间:2019-09-11 01:46:04

标签: mysql sql database oracle

List<type>

在上述情况下,有三个ID为1,2,3的客户。共有ID为a,b,c的三种产品。退货日期指定退货的日期。如果为NULL,则不返回产品。我想查询所有根本不拥有任何产品的所有customer_ID。

客户customer_ID product_id product_returned_date 1 a 12/12/2018 1 b NULL 2 a NULL 3 b 24/02/2018 2 c NULL 1 c 23/05/2017 当前拥有产品1,因为它们退回了ba

客户c当前拥有产品2a

客户c已退货产品3,因此目前没有任何产品。

因此,我想回头客3。


尝试: b

但是,这不能确保客户没有持有任何产品。

3 个答案:

答案 0 :(得分:1)

如果我的理解正确,您希望所有产品都有退货日期的客户。您可以使用聚合来实现:

select customer_id
from t
group by customer_id
having count(*) = count(product_returned_date);

答案 1 :(得分:1)

在这种情况下

3           b          24/02/2018
3           b          24/02/2018

我正在考虑使用此查询。

select customer_ID from tableA
group by customer_ID, product_id  
having count(distinct customer_ID, product_ID) = 1;

答案 2 :(得分:0)

这应该从不存在返回日期为空的行(返回的所有产品)的表中选择所有customer_ID。

SELECT
    a.customer_ID
FROM
    table a
WHERE
    NOT EXISTS (
        SELECT
            customer_ID
        FROM
            table
        WHERE
            customer_ID = a.Customer_ID
            AND
            product_returned_date IS NULL
    )