我的表中包含'买方','卖方'和'buyer_spend'列。每次购买都显示为一个单独的行,其中包含买方名称,卖方名称和已购买的金额。
是否可以使用单个查询来显示尚未从卖家购买的所有不同买家?
例如,如果我有'卖家A',我想找到所有未从卖家A购买的不同买家。我遇到了麻烦,因为以下查询返回所有交易不适用于卖方A,其中包括许多确实从另一行卖方A购买的买方。
SELECT DISTINCT buyer WHERE seller!='Seller A';
这可能很简单,但我很难理解它。
非常感谢提前。
答案 0 :(得分:1)
SELECT DISTINCT buyer FROM table WHERE buyer NOT IN
(SELECT DISTINCT buyer FROM table WHERE seller='Seller A')
答案 1 :(得分:1)
SELECT a.buyer FROM table a WHERE Left Join table as b
on a.id = b.id and a.seller='Seller A'
WHERE b.id is null
group by a.buyer
答案 2 :(得分:0)
我想你想要这样的东西
select distinct buyer from purchasetable where buyer not in (select buyer from buyertable)
虽然我是SQL Server开发人员,但我认为这仍然适用。
答案 3 :(得分:0)
以下是不使用连接的替代方法:
select buyer
from (select buyer, max(case when seller = 'Seller A' then 1 else 0 end) as hasSellerA
from t
group by buyer
) t
where hasSellerA = 0
根据我的经验,聚合查询通常比反连接执行得更好(非连接是反连接)。
答案 4 :(得分:0)
SELECT buyer
FROM atable
GROUP BY buyer
HAVING COUNT(seller = 'Seller A' OR NULL) = 0
/* or: SUM(seller = 'Seller'A') = 0 */