ВЫБЕРИТЕ несколько строк с помощью ГДЕ - PullRequest
4 голосов
/ 02 июля 2011
PID       VALUE
3        1
4        3
1        9
1        3

Как выбрать строки, которые имеют и значения 3 и 9? Я пытался

выберите PID из таблицы, где VALUE = 3 и VALUE = 9

Так что я получаю что-то вроде ниже, вместо этого я получаю пустой набор.

PID      
1       

PID 4 не должен быть включен в результат, поскольку он не имеет ЗНАЧЕНИЯ 9

Ответы [ 3 ]

8 голосов
/ 02 июля 2011

Предложение WHERE может оценивать условия только для одной строки из данной таблицы за раз. Вы не можете создать условие, охватывающее несколько строк.

Но вы можете использовать self-join , чтобы сопоставить несколько строк из одной таблицы в одну строку набора результатов, поэтому вы можете применить условие, включающее оба.

SELECT t1.pid
FROM table t1 JOIN table t2 ON t1.pid=t2.pid
WHERE t1.value = 3 AND t2.value = 9;

Альтернативным решением является использование GROUP BY и подсчет различных значений:

SELECT t.pid
FROM table t
WHERE t.value IN (3,9)
GROUP BY t.pid
HAVING COUNT(DISTINCT t.value) = 2;
1 голос
/ 02 июля 2011

Это, я думаю, немного больше того, что вы ищете:

select PID from table
where VALUE IN (3, 9) 
group by PID
having count(*) = 2

В основном это ищет записи, которые имеют 3 или 9, группирует их и возвращает только те, которые имеют счетчик два. Я предполагаю здесь (возможно, неправильно), что только может быть один 3 и один 9 на PID.

0 голосов
/ 02 июля 2011

Помимо 'group by', вы также можете рассмотреть вариант 'выбрать отличный', чтобы получить уникальный набор пидов.

...