我有一个很深的 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/