【问题标题】:Combine two tables into one table将两张表合并为一张表
【发布时间】:2016-11-15 23:35:35
【问题描述】:

我需要将用户表与一行中的所有用户图像连接起来,像这样

table user
+----+---------------+
|id  |   name        | 
+----+---------------+
| 1  | Mike          | 
| 2  | Jerry         |
| .. | .....         |  
+----+---------------+

table image
+------+---------+---------+
| id   | user_id |  img    |
+------+---------+---------+
|  1   |  1      | img_1   |
|  2   |  1      | img_2   |
|  3   |  1      | img_3   |
|  4   |  2      | img_4   |
|  ..  |  ....   | .....   |
+------+---------+---------+

我需要生成这样的 SQL 结果

+------+--------+----------+----------+----------+
| id   | name   |  img1    |  img2    |  img3    |
+------+--------+----------+----------+----------+
|  1   | Mike   |  img_1   |  img_2   |  img_3   |
+------+--------+----------+----------+----------+
|  ... | ....   |  ....    |  ....    |  ....    |
+------+--------+----------+----------+----------+

【问题讨论】:

    标签: mysql inner-join right-to-left


    【解决方案1】:

    这在 mysql 中本身并不支持,但是您可以使用枢轴来准确创建您的结果,但是这需要一些硬编码,如果可能的话我会避免。

    您的任务的一个简单解决方案可能是使用 GROUP_CONCAT(),它会产生类似的结果集

    +------+--------+----------+----------+----------+
    | id   | name   |  images                        |
    +------+--------+----------+----------+----------+
    |  1   | Mike   |  img_1;img_2;img_3             |
    +------+--------+----------+----------+----------+
    |  ... | ....   |                                |
    +------+--------+----------+----------+----------+
    

    如果足够好,您可以使用

    SELECT a.id, a.name, GROUP_CONCAT(b.img) images
    FROM user a 
        INNER JOIN image b ON a.id = b.user_id
    GROUP BY b.user_id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      相关资源
      最近更新 更多