我正在尝试从桥接表中获取类似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。
答案 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);