多个值IN

时间:2011-09-27 15:27:13

标签: sql postgresql in-subquery

通常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 个答案:

答案 0 :(得分:2)

假设您有列col1col2col3,并且您在子查询中寻找col1col2(为了这个目的)例证),你可以做类似的事情:

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)对出现在{{1} }}

答案 1 :(得分:1)

我可以用集合运算符来写这个:

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

    INTERSECT

    SELECT(<subquery>)
)

答案 2 :(得分:0)

虽然两种解决方案都有效,但我发现最快(不幸的是不是最短)的方式是使用CTE:

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