2013-11-27 63 views
1

我正在嘗試編寫一個SQL查詢來選擇供應商,因爲它可以提供其他供應商無法提供的產品。查找供應商供應其他人不需要的產品

我有2列: 供應商及產品

我怎麼會選擇所有的供應商,其供應至少1產品,其他供應商不提供?

我目前有:

SELECT incart.product, incart.supplier 
FROM incart 
WHERE incart.product 
HAVING count(incart.supplier)=1 
; 

回答

2

試試這個:

SELECT 
    i1.supplier 
FROM incart i1 
WHERE i1.product NOT IN(SELECT product 
         FROM incart i2 
         WHERE i1.supplier <> i2.supplier); 

例如,對於下面的示例數據:

| PRODUCT | SUPPLIER | 
|---------|----------| 
|  1 |  a | 
|  2 |  b | 
|  3 |  b | 
|  2 |  c | 
|  3 |  c | 
|  4 |  c | 

這將選擇供應商ac,因爲其他供應商a供應產品1 rs不要,供應商c提供其他人沒有的產品4。

+0

我想'GROUP BY'會使輸出看起來更乾淨;),但它的工程! – Ortix92

+0

@ Ortix92 - 如果您只選擇一列「供應商」,則可能需要使用「DISTINCT」,那麼不需要使用「GROUP BY」,也不使用沒有集合功能的GROUP BY,它在一些像MySQL這樣的RDBMS中工作,但這不是標準的做法。 –

相關問題