IN

2011-09-27 93 views
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,但它也需要子查詢。

回答

0

,我發現,最快的(可惜不是最短)的方法是使用CTE:

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

假設你有col2col1,以及col3和你正在尋找你的子查詢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>中。

1

我可能會在一組運營商而言這樣寫:雖然這兩種解決方案工程

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

    INTERSECT 

    SELECT(<subquery>) 
)