2

通常 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,但它也需要子查询。

4

3 回答 3

2

假设您有 columns col1, col2, andcol3并且您正在寻找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)对出现在<subquery>.

于 2011-09-27T15:36:12.670 回答
1

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

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

    INTERSECT

    SELECT(<subquery>)
)
于 2011-09-27T15:51:47.630 回答
0

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

WITH x AS (<subquery>)
SELECT * FROM data WHERE f1 IN (SELECT * FROM x) OR f2 (SELECT * FROM x)
于 2012-02-05T12:22:23.827 回答