2014-01-07 3 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 

ПРИМЕЧАНИЕ. У меня есть более 1 миллиона записей для запроса, поэтому мне нужно что-то быстро.

Мои 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 
       ) 
Смежные вопросы