2013-12-15 36 views
0

選擇鍵我有一臺這樣的
表創建:SQL:基於缺失值

key  value 
1  10000 
1  10001   
2  10001 

我想選擇鍵2,因爲它具有10001而不是10000有沒有一種簡單的方法?我嘗試使用連接,但我不知道如何使聯接選擇只有缺失的值。

+2

是不是重複鍵? – bansi

+3

你的問題不清楚,因爲你說你想選擇密鑰2,因爲它有10001,但密鑰1也有10001. – Sharad

+0

問題是足夠清楚:-p – Strawberry

回答

3

假設你正在尋找沒有所有可用value S的key S,你可以做,通過在整個表中的每個關鍵的DISTINCT value S中的數量比較DISTINCT value S上的號碼。

SELECT `key` FROM `table` 
GROUP BY `key` 
HAVING COUNT(DISTINCT value) < (SELECT COUNT(DISTINCT value) FROM `table`) 

在行動,在SQLFiddle

觀察,如果只有你感興趣的值的一組特定的,你可以改變這種使用硬編碼值。

SELECT `key` FROM `table` 
WHERE value IN (10001, 10000) 
GROUP BY `key` 
HAVING COUNT(DISTINCT value) < 2 

對於此推廣到值的數量較多,該HAVING子句中的號碼需要匹配的條件IN元件的數量。

+0

謝謝,第二個例子正是我所需要的。 Mahmoud Gamal的例子也是如此。也感謝他。 – Zereges

+1

如果你只想要「沒有10000的所有鑰匙」,馬哈茂德的答案是正確的。如果您有一個沒有10001的密鑰,它將不會顯示在我的第二個查詢中。 – Dan

+0

+1,這樣比較好 –

1

你可以簡單地這樣做:

SELECT DISTINCT t1.`key` 
FROM tablename t1 
WHERE t1.`key` NOT IN(SELECT `key` 
         FROM tablename 
         WHERE value = 10000); 
0

我認爲解決這個問題的最簡單的方法就是把邏輯having子句。以下計數的次數每個鍵出現並應用於你的邏輯:

select "key" 
from t 
group by "key" 
having sum(value = 10000) = 0 and 
     sum(value = 10001) > 0; 

這是使用MySQL的特徵,其中布爾表達式(value = 10000)被視爲整數,0是虛假和1是真實的。因此,sum(value = 10000)計算每個key的值爲10000的行數。