从Bridge表中获取组ID

时间:2012-05-15 09:40:16

标签: sql

我正在尝试从桥接表中获取类似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,我可以用count = 3进一步过滤它,但我的问题是,有更好的方法吗?我正在使用PL / SQL btw。

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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);