Oracle DB に次のようなテーブルがあるとします。
COL_A COL_B COL_C COL_D .... COL_XXX
A 1 2 1 ....
A 1 2 2 ....
A 1 2 3 ....
A 2 3 4 ....
B 1 2 5 ....
B 1 2 6 ....
B 1 2 7 ....
B 4 2 8 ....
B 1 4 9 ....
C 1 2 10 ....
C 1 2 11 ....
C 1 2 12 ....
C 1 2 13 ....
C 1 2 14 ....
そして、テーブル内の他のすべての列に関係なくCOL_A
、同じでCOL_B
あり、異なるレコードのみを見つけて(したがって、SQL で句を使用することはできません)、すべての値がのすべての値が同じです(この例では、 = "C"の場合、 &のすべての値が同じです)。COL_C
Distinct
COL_A
COL_B
COL_C
COL_A
(つまり、テーブルの他の行に関係なく、一致するCOL_B
/値に少なくとも 1 つの違いがある値のみを返します。)COL_C
COL_A
したがって、結果セットを次のようにしたいと思います。
COL_A COL_B COL_C
A 1 2
A 2 3
B 1 2
B 4 2
B 1 4
したがって、私が作成した SQL は次のようになります。
Select b.* FROM
(
Select a.*, COUNT(a.COL_A) OVER(PARTITION BY a.COL_A) as CNT FROM
(
select DISTINCT COL_A, COL_B, COL_C from MyTable) a
) b
WHERE
b.CNT > 1
さて、これは機能しますが、このデータを取得するためのより良い/より効率的な方法があるかどうか知りたいですか??
ありがとう!!!