2

次のようなブリッジテーブルからグループIDキーを取得しようとしています。

GROUP_KEY  DIM_KEY
    1        11
    1        12
    1        13
    1        14
    2        11
    2        12
    3        11
    3        12
    3        13
    3        15
    4        11
    5        11
    5        12
    5        13

私はこのクエリを少し検索しました:

SELECT b1.group_key
FROM BRIDGE b1
JOIN BRIDGE b2 ON (b1.group_key= b2.group_key)
JOIN BRIDGE b3 ON (b1.group_key= b3.group_key)
WHERE b1.dim_key = 11
  AND b2.dim_key = 12
  AND b3.dim_key = 13;

しかし、これで1、3、5が得られ、5だけが必要です。さらに、aa count = 3でフィルタリングできますが、私の質問は、より良い方法はありますか?私はPL/SQLを使用しています。

4

2 に答える 2

1

編集

Oracle 11gを使用している場合は、次のことを試してください。

 SELECT group_key FROM (
 SELECT GROUP_KEY, listagg(DIM_KEY, ',') WITHIN GROUP(ORDER BY DIM_KEY) DIM_KEY
   FROM t
  GROUP BY GROUP_KEY) WHERE dim_key = '11,12,13'
于 2012-05-15T10:16:14.397 に答える
0

私はあなたが何を望んでいるのか本当にわかりません。ただし、カウントを3にしたい場合は、次のように実行できます。

WITH CTE
(
    SELECT
        COUNT(GROUP_KEY) OVER(PARTITION BY GROUP_KEY) AS Counts,
        BRIDGE.*
    FROM
        BRIDGE
)
SELECT
    *
FROM
    CTE
WHERE
    CTE.Counts=3
    AND CTE.dim_key IN(11,12,13);
于 2012-05-15T09:52:14.030 に答える