2012-05-29 44 views
0

我有一個表,該表包括列「買方」「賣方」「buyer_spend」。每筆購買都顯示爲一個單獨的行,其中包含買方名稱,賣方名稱和購買金額。濾波不同的行中SQL

是否可以使用單個查詢來顯示尚未從賣家購買的所有不同買家?

例如,如果我有'賣方A',我想查找所有未從賣方A購買的不同買方。我遇到問題,因爲以下查詢返回所有不是賣方的交易A,其中包括許多確實從另一排的賣家A購買的買家。

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

這可能是相當直接的,但我正在努力讓我的頭部圓。

非常感謝提前。

回答

0

我想你想是這樣的

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

雖然,我是一個SQL Server開發者,我認爲這仍將適用。

1
SELECT DISTINCT buyer FROM table WHERE buyer NOT IN 
    (SELECT DISTINCT buyer FROM table WHERE seller='Seller A') 
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 
+0

你能解釋一下更廣泛的答案嗎? tnx –

+0

我使用id和a.seller ='Seller A'上的同一張表進行左連接。 如果買方購買了smth,b.id會有一些其他意思,否則它將爲空,最後我們需要 – levi

+1

thanx來解釋 –

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 

以我的經驗,聚集查詢常常執行比反連接(未連接中的更好是反連接)。

0
SELECT buyer 
FROM atable 
GROUP BY buyer 
HAVING COUNT(seller = 'Seller A' OR NULL) = 0 
    /* or: SUM(seller = 'Seller'A') = 0 */