【问题标题】:How to create View in MySQL to combine rows from second table as CSV colmuns in first如何在 MySQL 中创建视图以将第二个表中的行组合为第一个 CSV 列
【发布时间】:2015-10-14 18:38:59
【问题描述】:

我需要在 MySQL 中创建 VIEW,它可以以这样的方式组合两个表,即对于第一个表中的每一行,都必须从第二个表中添加列,但由于行数据必须格式化为多个字段,每个字段都有多个 CSV行。

我最初的方法是使用 MySQL VIEW,但我无法找到将第二个表中的多行数据显示为视图表中的 CSV 单单元格数据的方法。

这里有一些例子:

1st table: gears
+------------+------------------------+-----------------+
| MainGearID | MainGearName           | MainGearType    |
+------------+------------------------+-----------------+
|          1 | Main Drive             | Spur            |
|          2 | Secondary Drive        | Spur            |
|          3 | Backup Secondary Drive | Hypoid          |
|          4 | AUX Drive              | Rack and pinion |
+------------+------------------------+-----------------+

2nd table: orbitinggears:
+----------+------------+--------------+--------------+
| OrbitaID | MainGearID | OrbitalType  | OrbitalValue |
+----------+------------+--------------+--------------+
|        1 |          1 | Spur         | 112          |
|        2 |          1 | Spur         | 280          |
|        3 |          2 | Spur         | 144          |
|        4 |          2 | Spur         | 248          |
|        5 |          3 | Helical      | 18           |
|        6 |          4 | Spur         | 144          |
+----------+------------+--------------+--------------+

Required View:
+------------+------------------------+-----------------+----------+---------+
| MainGearID | MainGearName           | MainGearType    | Spur     | Helical |
+------------+------------------------+-----------------+----------+---------+
|          1 | Main Drive             | Spur            | 112,280, |         |
|          2 | Secondary Drive        | Spur            | 144,248, |         |
|          3 | Backup Secondary Drive | Hypoid          |          | 18,     |
|          4 | AUX Drive              | Rack and pinion | 144,     |         |
+------------+------------------------+-----------------+----------+---------+

有人知道如何以这种方式创建视图吗?

【问题讨论】:

    标签: mysql multiple-columns multiple-tables sql-view


    【解决方案1】:

    您可以将GROUP_CONCAT 与IF() 一起使用:

    CREATE VIEW v6 AS 
    SELECT a.MainGearID, a.MainGearName, a.MainGearType, 
       GROUP_CONCAT(IF(b.OrbitalType='Spur',b.OrbitalValue,null)) AS Spur,
       GROUP_CONCAT(IF(b.OrbitalType='Helical',b.OrbitalValue,null)) AS Helical
     FROM gears a
     JOIN orbitinggears b on b.MainGearID=a.MainGearID
     GROUP BY a.MainGearID;
    

    【讨论】:

    • 我试过你的方法。现在视图表结构很好,但输出数据不是。有了这个,我只得到 1 行,该行内的所有支线型轨道器,即使是那些不相互接触的轨道器(在这种情况下不是通过逻辑键 MainGearID 连接):(
    • @Endlessless,我错过了GROUP BY 部分,现已添加。
    • 谢谢,现在它的工作就像一个魅力。我刚刚编辑了这个查询:添加了别名并用 ON 替换了 USING 所以现在如果有人对不同的表有类似的要求,你的答案中的查询可以很容易地适应一般用途。
    猜你喜欢
    • 2014-12-12
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2019-11-14
    • 1970-01-01
    相关资源
    最近更新 更多