通常 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,但它也需要子查询。
通常 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,但它也需要子查询。
假设您有 columns col1
, col2
, andcol3
并且您正在寻找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>
.
我可以用集合运算符来写这个:
SELECT *
FROM data
WHERE EXISTS (
VALUES(f1, f2)
INTERSECT
SELECT(<subquery>)
)
虽然这两种解决方案都有效,但我发现最快(不幸的是不是最短)的方法是使用 CTE:
WITH x AS (<subquery>)
SELECT * FROM data WHERE f1 IN (SELECT * FROM x) OR f2 (SELECT * FROM x)