我有两张桌子:
记录
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
目标是选择不是子记录的记录
具有来自记录和子记录的相应值的总和:
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的子记录
列“值” - 唯一值列表 fe id 1 =来自id1 + id2 + id4
的不同值任何帮助?
答案 0 :(得分:0)
这很棘手,因为连接会产生一堆额外的行。将数据合并在一起的关键想法是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;
表现不会特别好。因此,此解决方案应该适用于小型数据集。它可能不适用于大型数据集。