首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从桥接表中获取组密钥

从桥接表中获取组密钥
EN

Stack Overflow用户
提问于 2010-06-07 15:13:45
回答 2查看 514关注 0票数 1

我正在开发一个ETL流程,需要一个桥接表,用于事实表和维度表(MySQL数据库)之间的一对多关系。组合的数量是有限的(几千个),所以我想重用桥接表中的组键来限制大小。

属于事实行的任何维组都将由多个维键(1到15左右)组成,分配给一个唯一的组键,如下所示:

代码语言:javascript
运行
复制
group_key | dimension_key
-----------------------
1         | 1
1         | 3
1         | 4
2         | 1
2         | 2
2         | 3
3         | 1
3         | 4

如何检索维度1、3、4(即,1)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-07 16:18:30

我认为您正在请求一个返回组的查询,以便特定列表中的所有维度都与该组相关联。也就是说,必须存在将该组映射到每个维度的行,并且您希望知道哪些组满足这一要求。

代码语言:javascript
运行
复制
SELECT f1.group_key
FROM facts f1
JOIN facts f2 ON (f1.group_key = f2.group_key)
JOIN facts f2 ON (f1.group_key = f2.group_key)
WHERE f1.dimension_key = 1
  AND f2.dimension_key = 3
  AND f3.dimension_key = 4;

另一种解决方案是计算组中匹配的行数:

代码语言:javascript
运行
复制
SELECT f.group_key
FROM facts f
WHERE f.dimension_key IN (1,3,4)
GROUP BY f.group_key
HAVING COUNT(*) = 3;

但是我发现GROUP BY通常是一个性能杀手,特别是在MySQL中。

票数 1
EN

Stack Overflow用户

发布于 2010-06-07 16:12:15

如果我没理解错的话,你想要的是一个桥接表,看起来像这样:

代码语言:javascript
运行
复制
group_key | dimension_set
-----------------------
1         | (1, 3, 4)
2         | (1, 2, 3)
3         | (1, 4)

我可以看到你有两个选项。

您可以将整个桥接表放入一个程序中,然后通过编程方式从维度集中确定组键。

或者,您可以使用数学公式对维键进行编码,得到一个整数,然后再对其进行索引。

a + (b * 32) + (c * 32 * 32) + ...这样的东西使用2的最低幂,它包含了唯一维度的数量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2987652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档