我正在运行一个非常基本的查询。问题是我正在尝试与从未订购产品Y的所有客户取得成果。问题是,如果我使用简单的WHERE ProductColumn <> 'Product Y'
,它将无法正常工作,因为几乎所有客户都订购了其他产品产品。
基本上,我想知道如何在客户级别(而不是订单级别)上排除-如果客户已订购产品Y,我根本不希望他们出现在我的结果中。
谢谢。
答案 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'