代码之家  ›  专栏  ›  技术社区  ›  Escher

同一列上的MySQL UNION/JOIN

  •  1
  • Escher  · 技术社区  · 11 年前

    我有一个规范化表,它的行是指向小部件表中主键的两个外键。其思想是小部件成对出现,因此规范化表有两列:小部件1和小部件2。

    +--------------------+
    | widget1 | widget2  |
    +--------------------+
    |    1    |    3     |
    |    2    |    4     |
    +--------------------+
    

    每个小部件也有两列;其主键及其名称。如

    +------------+
    | pk | name  |
    +------------+
    | 1  | Bob   |
    | 2  | Joe   |
    | 3  | Max   |
    | 4  | Tim   |
    +------------+
    

    我正在尝试构建一个查询,以获取哪个名称对应于哪个其他名称,即:

    +--------------------+
    | widget1 | widget2  |
    +--------------------+
    |   Bob   |   Max    |
    |   Joe   |   Tim    |
    +--------------------+
    

    UNION 将两个select语句合并为一个长列。如何获得所需的输出? Here's the SQLFiddle.

    1 回复  |  直到 11 年前
        1
  •  1
  •   eggyal    11 年前

    你想要两个连接,而不是一个 UNION :

    SELECT w1.name, w2.name
    FROM   norm
      JOIN widgets w1 ON w1.pk = norm.widget1
      JOIN widgets w2 ON w2.pk = norm.widget2
    

    请在上查看 sqlfiddle .

    推荐文章