Запрос SQL возвращает дубликат - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть исполнения, и у каждого исполнения есть несколько изображений и видео, например,

исполнение таблицы

 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 голосов
/ 15 февраля 2019

У вас есть отношение 1-N (или, возможно, NM) в агрегируемых данных.Если в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...