0

我有一张表,其中包括'buyer''seller''buyer_spend'列。每次购买都显示为单独的一行,其中包含买家姓名、卖家姓名和已购买的金额。

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

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

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

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

提前谢谢了。

4

5 回答 5

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
于 2012-05-29T10:28:01.273 回答
1
SELECT DISTINCT buyer FROM table WHERE buyer NOT IN 
    (SELECT DISTINCT buyer FROM table WHERE seller='Seller A')
于 2012-05-29T09:38:53.280 回答
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

根据我的经验,聚合查询通常比反连接执行得更好(非连接是反连接)。

于 2012-05-29T13:41:16.427 回答
0
SELECT buyer
FROM atable
GROUP BY buyer
HAVING COUNT(seller = 'Seller A' OR NULL) = 0
  /* or: SUM(seller = 'Seller'A') = 0 */
于 2012-05-29T14:10:28.180 回答
0

我猜你想要这样的东西

select distinct buyer from purchasetable where buyer not in (select buyer from buyertable)

虽然,我是一名 SQL Server 开发人员,但我认为这仍然适用。

于 2012-05-29T09:36:31.063 回答