我有处决,每个处决都有几个图像和视频,例如,
表执行
id | name
1 execution1
表格图片
id | executionId | image
1 1 'path'
2 1 'path2'
桌面音频
id | executionId | audio
1 1 'path3'
我想要一个查询来获取所有执行,每个执行都具有其所有图像,例如
{ executions: [
{ id: 1,
name: execution1,
images: 'path+path2',
audio: 'path3'
},
{...}
]
}
我有这个查询:
query =
"select a.id, group_concat(image.image SEPARATOR '+'), group_concat(audio.audio SEPARATOR '+')
from execution a
left join image on image.executionId = a.id
left join audio on audio.executionId = a.id
group by a.id";
但返回
{ executions: [
{ id: 1,
name: execution1,
images: 'path+path2',
audio: 'path3+path3'
},
{...}
]
}
为什么?
答案 0 :(得分:1)
正在聚合的数据中存在1-N(或N-M)关系。如果audio
中有一个记录,而image
中有两个记录(或相反),则在GROUP_CONCAT(audio ...)
生成的字符串中将得到重复的值。
一个解决方案是使用DISTINCT
来避免在GROUP_CONCAT
中重复数据:
select
a.id,
group_concat(DISTINCT image.image SEPARATOR '+'),
group_concat(DISTINCT audio.audio SEPARATOR '+')
from execution a
left join image on image.executionId = a.id
left join audio on audio.executionId = a.id
group by a.id