Несколько значений IN - PullRequest
       30

Несколько значений IN

2 голосов
/ 27 сентября 2011

Обычно IN используется с одним значением:

SELECT * FROM data WHERE f1 IN (<subquery>)

Можно использовать его с несколькими значениями:

SELECT * FROM data WHERE f1 IN (<subquery>) OR f2 IN (<subquery>);

Но я могу удалить дублирование, что-то вроде:

SELECT * FROM data WHERE ANY(f1, f1) IN (<subquery>)

Я пытался использовать CTE, но он также требует подзапроса.

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Предполагая, что у вас есть столбцы col1, col2 и col3 и что вы ищете col1 и col2 в своем подзапросе (для иллюстрации), вы можете сделать что-то вроде:

select col1,col2,col3
from table
where (col1,col2) in (<subquery>)
group by 1,2,3;

До тех пор, пока <subquery> имеет (грубую) форму select col1,col2 from <blah>, в результате вы получите четкие (col1,col2,col3) тройки, в которых (col1,col2) пары появляются в <subquery>.

1 голос
/ 27 сентября 2011

Я мог бы написать это в терминах операторов множеств:

SELECT *
FROM data
WHERE EXISTS (
    VALUES(f1, f2)

    INTERSECT

    SELECT(<subquery>)
)
0 голосов
/ 05 февраля 2012

Хотя оба решения работают, я обнаружил, что самый быстрый (к сожалению, не самый короткий) способ - использовать CTE:

WITH x AS (<subquery>)
SELECT * FROM data WHERE f1 IN (SELECT * FROM x) OR f2 (SELECT * FROM x)
...