2016-12-14 6 views
0

Я не знаю, как написать запрос ниже.Поиск комбинаций определенных значений

Моя таблица

col1 col2 
5 1 
5 5 
5 6 
5 7 
4 5 
4 8 
4 9 
4 3 
3 3 
3 5 

нужно выбрать отличный col1 идентификатор, где оба параметра существует в col2. например. если я посылаю 6,7 он должен прислать мне 5

+1

Обратите внимание, что это не рекурсивный запрос. соответственно измените название. –

+0

Спасибо, пожалуйста, укажите название, сделайте нужный – noobProgrammer

+0

Ваш вопрос должен содержать фактическое определение таблицы ('CREATE TABLE') и вашу версию Postgres. –

ответ

0

Try:

SELECT col1 
FROM mytable 
WHERE col2 IN (6, 7) 
GROUP BY col1 
HAVING COUNT(DISTINCT col2) = 2 
+0

(Я надеюсь, что DISTINCT избыточно.) – Strawberry

+0

Не известны никакие уникальные ограничения, поэтому необходим DISTINCT. – jarlh

1

Это, вероятно, одним из самых быстрых решений:

SELECT col1 -- already DISTINCT? 
FROM tbl t1 
JOIN tbl t2 USING (col1) 
WHERE t1.col2 = 6 
AND t2.col2 = 7; 

Предполагая PRIMARY KEY или UNIQUE ограничение на (col1, col2), как это как правило, реализуется. Остальное добавить DISTINCT.

Существует множество других способов реализации реляционного деления. Вот некоторые из них: