MySQL - таблица объединяет дубликаты данных - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь объединить 3 разные таблицы в одну для удобства чтения и означает, что вам не нужно загружать отдельные таблицы для просмотра содержимого

эти 3 таблицы содержат разные значения, относящиеся к одной и той же сущности (cat)

в этих таблицах есть несколько записей об одной кошке, которые следуют нормализации и удаляют атрибуты с несколькими значениями.

это структуры таблиц:

CATMEDICAL( Chip_ID, Med_His ) VALUES( %s, %s)
CATDIET( Chip_ID, Diet_Req ) VALUES( %s, %s)
CATREQ( Chip_ID, Add_Req ) VALUES( %s, %s)

Я использую следующий сценарий для объединения этих таблиц:

SELECT 
  CATINFO.Chip_ID AS Cat, 
  CATDIET.Diet_Req AS Diet, 
  CATMEDICAL.Med_his AS Med, 
  CATREQ.Add_Req AS Req 
  FROM CATINFO 
  INNER JOIN CATDIET ON CATINFO.Chip_ID = CATDIET.Chip_ID 
  INNER JOIN CATMEDICAL ON CATINFO.Chip_ID = CATMEDICAL.Chip_ID 
  INNER JOIN CATREQ ON CATINFO.Chip_ID = CATREQ.chip_ID 

Этот сценарий выполняется нормально, проблема, с которой я сталкиваюсь является то, что представлена ​​повторяющаяся дата.

например, cat3 имеет несколько записей во всех 3 таблицах, что означает, что полученная объединенная таблица имеет несколько индексов для cat3,

'3', 'nut allergy', 'allergy emergency', 'left alone'
'3', 'nut allergy', 'allergy emergency', 'tv on'
'3', 'nut allergy', 'hip surgery', 'left alone'
'3', 'nut allergy', 'hip surgery', 'tv on'

есть способ удалить дублировать результаты / индексы и объединять их в одну строку только для просмотра согласованности?

1 Ответ

0 голосов
/ 09 апреля 2020

Вы можете GROUP BY CATINFO.Chip_ID, CATDIET.Diet_Req и использовать GROUP_CONCAT() следующим образом:

SELECT 
  CATINFO.Chip_ID AS Cat, 
  CATDIET.Diet_Req AS Diet, 
  GROUP_CONCAT(DISTINCT CATMEDICAL.Med_his) AS Med, 
  GROUP_CONCAT(DISTINCT CATREQ.Add_Req) AS Req 
FROM CATINFO 
INNER JOIN CATDIET ON CATINFO.Chip_ID = CATDIET.Chip_ID 
INNER JOIN CATMEDICAL ON CATINFO.Chip_ID = CATMEDICAL.Chip_ID 
INNER JOIN CATREQ ON CATINFO.Chip_ID = CATREQ.chip_ID
GROUP BY CATINFO.Chip_ID, CATDIET.Diet_Req

Таким образом, вы получите 1 строку для каждой комбинации CATINFO.Chip_ID и, CATDIET.Diet_Req и других столбцов через запятую списки:

'3' | 'nut allergy' | 'allergy emergency','hip surgery' | 'left alone','tv on'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...