合并来自两个 Mysql 表的记录
Combining records from two Mysql tables
我有两个表:
记录
id subrecord_of
1 0
2 1
3 0
4 1
5 0
6 5
值
id value
1 11
1 111
2 222
2 222
2 2222
3 33
4 44
6 66
6 666
目标是 select 记录不是子记录
来自记录和子记录的值的相应总和:
id sub sum_of_values
1 2,4 11,111,2222,222,44
3 null 33
5 6 666,66
列"id" - sub 为 0 的记录
列 "sub" - 子记录列表
fe id 2 和 id 4 是 id 1
的子记录
列 "values" - 唯一值列表
fe id 1 = 来自 id1 + id2 + id4
的不同值
有什么帮助吗?
这很棘手,因为连接会生成一堆额外的行。将数据结合在一起的关键思想是 group_concat()
和 group by
.
以下将起作用:
select r.id,
group_concat(distinct rs.id) as sub,
group_concat(distinct v.value) as values
from records r left join
records rs
on rs.subrecordof = r.id left join
values v
on v.id in (r.id, rs.id)
where r.subrecordof = 0
group by r.id;
性能不会特别好。因此,该解决方案应该适用于小型数据集。它可能不适用于大型数据集。
我有两个表:
记录
id subrecord_of
1 0
2 1
3 0
4 1
5 0
6 5
值
id value
1 11
1 111
2 222
2 222
2 2222
3 33
4 44
6 66
6 666
目标是 select 记录不是子记录
来自记录和子记录的值的相应总和:
id sub sum_of_values
1 2,4 11,111,2222,222,44
3 null 33
5 6 666,66
列"id" - sub 为 0 的记录
列 "sub" - 子记录列表 fe id 2 和 id 4 是 id 1
的子记录列 "values" - 唯一值列表 fe id 1 = 来自 id1 + id2 + id4
的不同值有什么帮助吗?
这很棘手,因为连接会生成一堆额外的行。将数据结合在一起的关键思想是 group_concat()
和 group by
.
以下将起作用:
select r.id,
group_concat(distinct rs.id) as sub,
group_concat(distinct v.value) as values
from records r left join
records rs
on rs.subrecordof = r.id left join
values v
on v.id in (r.id, rs.id)
where r.subrecordof = 0
group by r.id;
性能不会特别好。因此,该解决方案应该适用于小型数据集。它可能不适用于大型数据集。