通常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,但它也需要子查询。
答案 0 :(得分:2)
假设您有列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)
对出现在{{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)