mysql - 将深度匹配表变成扁平表的最佳方法

标签 mysql

我有一个很深的 mysql 表,有 4 列

source1 | id1 | source2 | id2
red     |   1 | blue    |   1
red     |   1 | green   |   3
red     |   1 | green   |   6
red     |   2 | blue    |   2
red     |   3 | blue    |   2

我想要的是...... (source)_ids、(source)_ids、(source)_ids、(source)_ids 等,每个不同的源都有不同的列。

所以

变成......

red_ids | blue_ids | green_ids
1       |   1      | 3, 6
2,3     |   2      | NULL

我尝试使用 case 和 group_concat 来完成此任务,但尚未完全得到我想要的结果。在我尝试通过编写 python 程序来做到这一点之前,有人知道这是否有一个正常的约定吗?

如果添加新来源,动态会更好。

提前致谢。

最佳答案

实际上,这个问题比最初出现时要棘手。在我看来,想出一种在 SQL 中动态构建它的方法几乎是不可能的 - 所以我很想切换到应用程序层解决方案 - 但有人可能有另一个想法......

     SELECT GROUP_CONCAT(DISTINCT r.id1) red
          , GROUP_CONCAT(DISTINCT b.id2) blue
          , GROUP_CONCAT(DISTINCT g.id2) green
       FROM my_table r 
       LEFT
       JOIN my_table b 
         ON b.id1 = r.id1
        AND b.source2 = 'blue'
       LEFT
       JOIN my_table g 
         ON g.id1 = r.id1
        AND g.source2 = 'green'
      WHERE r.source1 = 'red'
      GROUP
         BY r.source1
          , b.source2
          , g.source2;

关于mysql - 将深度匹配表变成扁平表的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44398930/

相关文章:

mysql - 按每行多个字段中字符串出现的次数对结果进行排序

mysql - 在容器启动时启动服务

mysql - 从表中的分组记录中选择除最后一条记录之外的所有记录

python - 为什么我在使用 MySQLdb 连接时在 Flask 中出现 500 内部服务器错误?

PHP 脚本错误

mysql - 如何找出 MySQL 比较查询返回 true 和 false 的次数?

php - 搜索 PHP 和 MYSQL

mysql - 如何改进关于TimeStamp的SELECT?

php - 使用 PHP 删除数据库值,不起作用

mysql - 忽略 pt-online-schema-change 的警告