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 и получите то что нужно.