【问题标题】:MYSQL Denormalized table lookupMYSQL 非规范化表查找
【发布时间】:2011-12-12 09:27:53
【问题描述】:

您好 Stack Overflow 的同路人。除了用图片更好地解释我的意思之外,我不完全确定如何问这个问题。如果偶然有人问过这个问题而我没有找到它,我深表歉意。

我有 2 个表 tableA 和 tableB。 TableA 包含一个标记为 id 和 displayName 的列,其中有几十个项目(为简单起见,我们假设只有 5 个)。 ID 列是唯一的并且自动递增,它也是搜索的主键。第二个表 (TableB) 还包含该项目的 id,但也包含对 TableA 的 id 的 4 个引用以及一些无关紧要的无关信息。所以它看起来像这样:

TableA
-------------------------
|  id    |  displayName  |
-------------------------
|  1     |  itemA        |
|  2     |  itemB        |
|  3     |  itemC        |
|  4     |  itemD        |
|  5     |  itemE        |
-------------------------

TableB
--------------------------------------------------------
|  id    | name |  varA   |  varB   |  varC   |  varD   |
--------------------------------------------------------
|  1     | elm1 |    3    |    4    |    2    |    5    |
|  2     | elm2 |    4    |    5    |    2    |    1    |
|  3     | elm3 |    1    |    4    |    3    |    2    |
|  4     | elm4 |    2    |    1    |    5    |    4    |
|  5     | elm5 |    3    |    4    |    5    |    1    |
--------------------------------------------------------

我目前有一个查询,它将折叠值并为我提供所需的信息: SQL:从表 B tB 中选择 tB.name、tB.varA、tB.varB、tB.varC、tB.varD 按 tB.name 分组

现在我想做的不是让 varA、varB 等显示为数字,而是让数据与 TableA 相关联并插入 displayName。所以不是

Result
-----------------------------------------------
| name |  varA   |  varB   |  varC   |  varD   |
-----------------------------------------------
| elm1 |    3    |    4    |    2    |    5    |
| elm2 |    4    |    5    |    2    |    1    |
-----------------------------------------------

它会显示:

Result
-----------------------------------------------
| name |  varA   |  varB   |  varC   |  varD   |
-----------------------------------------------
| elm1 |  itemC  |  itemD  |  itemB  |  itemE  |
| elm2 |  itemD  |  itemE  |  itemB  |  itemA  |
-----------------------------------------------

【问题讨论】:

    标签: mysql denormalized


    【解决方案1】:

    您只需要在分组后进行 4 次连接。

    附:我不明白,为什么你在 tableB 中按名称对 rusults 进行分组。

    假设您不必以这种方式进行分组(在其他情况下,其他值没有多大意义):

    SELECT b.name,
        aa.displayName as varA,
        ab.displayName as varB,
        ac.displayName as varC,
        ad.displayName as varD
    FROM tableB as b
    JOIN tableA as aa ON b.varA = aa.id
    JOIN tableA as ab ON b.varB = ab.id
    JOIN tableA as ac ON b.varC = ac.id
    JOIN tableA as ad ON b.varD = ad.id;
    

    【讨论】:

      猜你喜欢
      • 2013-08-21
      • 2018-06-06
      • 2013-01-08
      • 2015-06-25
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2010-11-30
      相关资源
      最近更新 更多