2014-01-07 98 views
1

這看起來很簡單,但我無法獲得需要的結果。MySQL獲取與某些條件不匹配的行

我的表

id, code, type 
1 1111 1 
2 1111 2 
3 1222 1 <--- This one 
4 1333 1 
5 1333 2 
6 1444 3 <--- Different type then the others 

我想要的輸出不具有匹配的代碼與2型,但只尋找那些患有1型或2型(如果是有道理的)

id, code, type 
3 1222 1 

注:我有超過100萬記錄要查詢,所以我需要快速的東西。

SqlFiddle

在此先感謝。

+0

請解釋不同!試着向朋友解釋,直到他們至少明白你在問什麼,然後回來編輯你的問題 – cja

+0

哎呦,修正了那種類型,我的意思是沒有匹配代碼和類型2的那個,所以id 3。 – John

+0

你*只*想要類型1沒有匹配類型2的代碼(按照你的例子),還是你想要類型2代碼沒有匹配類型1? – eggyal

回答

1
SELECT * FROM codes NATURAL JOIN (
    SELECT code 
    FROM  codes 
    WHERE type IN (1,2) 
    GROUP BY code 
    HAVING COUNT(DISTINCT type) = 1 
) t 

請參閱sqlfiddle

1

下面是使用not exists一個解決方案:

SELECT c.* 
FROM codes c 
WHERE c.type = 1 and 
     not exists (select 1 
        from codes c2 
        where c2.code = c.code and 
         c2.type = 2 
       )