2

通常、INは次の1つの値で使用されます。

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

col1列、、がcol2あり、サブクエリで(説明のために)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>

于 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 に答える