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 回答