SQL查询返回重复

时间:2019-02-15 17:36:06

标签: mysql sql

我有处决,每个处决都有几个图像和视频,例如,

表执行

 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'
          },
         {...}
      ]
    }

为什么?

1 个答案:

答案 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