SQL запрос: Выборка в таблице по двум полям с двумя столбцами. Как?

Есть таблица:

Текст

Необходимо получить post_id где колонка name=ExtractFiles и колонка status=none, плюс колонка name=DownloadFromFileHosting и колонка status=ок

В нашем случае получим post_id номер 133

Спасибо.


Ответы (3 шт):

Автор решения: Denis I
SELECT post_id FROM your_table WHERE name='ExtractFiles' AND status='none' 
UNION
SELECT post_id FROM your_table WHERE name='DownloadFromFileHosting' AND status='ok' 
→ Ссылка
Автор решения: Akina
SELECT post_id
FROM sourcetable
WHERE (name, status) IN ( ('ExtractFiles', 'none'),
                          ('DownloadFromFileHosting', 'ok') )
GROUP BY post_id
HAVING COUNT(DISTINCT name, status) = 2
→ Ссылка
Автор решения: Lexx918

Можно объединить таблицу саму с собой по post_id, а потом из одной взять записи по вашему первому условию, а из второй - по второму. В пересечении окажутся нужные идешки.

Тестовые данные:

create table foo (post_id int, name char(8), status char(10))
select 1 post_id, 'name-1-1' name, 'status-1-1' status union
select 1 post_id, 'name-1-2' name, 'status-1-2' status union
select 2 post_id, 'name-2-1' name, 'status-2-1' status union
select 2 post_id, 'name-2-2' name, 'status-2-2' status union
select 3 post_id, 'name-3-1' name, 'status-3-2' status

И запрос вида:

select f1.post_id
from foo f1
inner join foo f2 using(post_id)
where f1.name = 'name-1-1'
  and f1.status = 'status-1-1'
  and f2.name = 'name-1-2'
  and f2.status = 'status-1-2'

.. найдёт post_id = 1. Подставьте свои значения в where и получите то что нужно.

http://sqlfiddle.com/#!9/3d50dc/1

→ Ссылка