排除特定订单客户的最佳方法

时间:2018-08-27 19:58:56

标签: sql sql-server tsql

我正在运行一个非常基本的查询。问题是我正在尝试与从未订购产品Y的所有客户取得成果。问题是,如果我使用简单的WHERE ProductColumn <> 'Product Y',它将无法正常工作,因为几乎所有客户都订购了其他产品产品。

基本上,我想知道如何在客户级别(而不是订单级别)上排除-如果客户已订购产品Y,我根本不希望他们出现在我的结果中。

谢谢。

3 个答案:

答案 0 :(得分:3)

您可能正在寻找EXISTS()。

如果我想找到下订单的客户:

SELECT c.*
FROM customers c
WHERE EXISTS (
SELECT 1 
FROM orders o
WHERE o.customerid = c.customerID
AND productID = 'Y'
)

如果我要查找尚未下订单的客户:

SELECT c.*
FROM customers c
WHERE NOT EXISTS (
SELECT 1 
FROM orders o
WHERE o.customerid = c.customerID
AND productID = 'Y'
)

答案 1 :(得分:2)

尝试一下:

select * from customers c
where not exists(select 1 from customers
                 where cutomer_id = c.customer_id
                 and productcolumn = 'product y')

这假定您具有“ customer_id”列(或表中至少有一些id列)。

答案 2 :(得分:2)

简单的LEFT JOIN应该可以工作:

SELECT c.*
FROM customers c
    LEFT OUTER JOIN orders o
        ON o.customerid = c.customerID
WHERE o.ProductColumn <> 'Product Y'