ВЫБРАТЬ только записи, которые должны заполнять два условия - PullRequest
2 голосов
/ 21 февраля 2011

У меня есть эта таблица:

id type otherid
1   4     1234
2   5     1234
3   4     4321

Как вы можете видеть, есть 3 записи, 2 из них относятся к другой "1234" и имеют тип 4 и 5.

Последняя запись принадлежит otherid "4321" и имеет только тип 4.

Мне нужно выбрать все остальные, которые получили только тип 4, а не тип 5.

Пример: после выбора этой таблицы запрос должен вернуть только запись 3

Спасибо

add1:

Обратите внимание, что ТИП может быть любым числом от 1 до 20. Мне нужен только другой, который получил тип 4, но не тип 5 (за исключением того, что они могут иметь любой другой тип)

add2:

с использованием MySQL 5.1

Ответы [ 3 ]

1 голос
/ 21 февраля 2011

Это своего рода обходной путь

SELECT * FROM (
  SELECT GROUP_CONCAT('|',type,'|') type,other_id FROM table GROUP BY otherid
) t WHERE type LIKE '%|4|%' AND type NOT LIKE '%|5|%'
1 голос
/ 21 февраля 2011

Вы можете использовать not exists подзапрос:

select  distinct otherid
from    YourTable as yt1
where   yt1.type = 4
        and not exists
        (
        select  *
        from    YourTable as yt2
        where   yt1.otherid = yt2.otherid
                and yt1.type <> yt2.type  -- use this line for any difference
                and yt2.type = 5          -- or this line to just exclude 5
        )
0 голосов
/ 21 февраля 2011

Другой способ - использовать левое соединение, из которого вы исключаете строки, имеющие тип 4 и 5:

select a.*
from table1 a
    left join table1 b on b.otherid = a.otherid and b.type = 5
where a.type = 4 and b.id is null
...