过滤SQL中的不同行

时间:2012-05-29 09:32:24

标签: mysql sql

我的表中包含'买方''卖方''buyer_spend'列。每次购买都显示为一个单独的行,其中包含买方名称,卖方名称和已购买的金额。

是否可以使用单个查询来显示尚未从卖家购买的所有不同买家?

例如,如果我有'卖家A',我想找到所有未从卖家A购买的不同买家。我遇到了麻烦,因为以下查询返回所有交易不适用于卖方A,其中包括许多确实从另一行卖方A购买的买方。

SELECT DISTINCT buyer WHERE seller!='Seller A';

这可能很简单,但我很难理解它。

非常感谢提前。

5 个答案:

答案 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 */