Mysql объединяет несколько записей с одним и тем же идентификатором, игнорируя пустые поля

Я хочу объединить несколько записей с одним и тем же идентификатором в одну запись для каждого идентификатора. Мне пришлось использовать сводные таблицы, чтобы получить нужные мне данные из нескольких других таблиц и в промежуточную таблицу, которая выглядит примерно так:

ID |Data1|Data2|Data3|Data4
1   asdf  NULL  NULL  NULL
1   NULL  blah  NULL  NULL
1   NULL  NULL  this  NULL
1   NULL  NULL  NULL  data
2   NULL  funk  NULL  NULL
2   NULL  NULL  jazz  NULL

И я хотел бы найти способ объединить все записи с одним и тем же идентификатором в новую запись в новой таблице, которая выглядит так:

ID |Data1|Data2|Data3|Data4
1   asdf  blah  this  data
2   NULL  funk  jazz  NULL

Я просмотрел несколько других подобных вопросов здесь и на других веб-сайтах, которые, похоже, имеют дело с числовыми значениями в таких полях, как этот (Объединить несколько строк с одинаковым идентификатором в одну строку). Они не имеют желаемого эффекта. Любая помощь будет оценена по достоинству.


person BobbyQ    schedule 04.10.2018    source источник


Ответы (2)


Используйте MAX() с GROUP BY пунктом:

SELECT t.ID, 
       MAX(t.Data1), 
       MAX(t.Data2), 
       MAX(t.Data3), 
       MAX(t.Data4) 
FROM table AS t
GROUP BY t.ID;
person Yogesh Sharma    schedule 04.10.2018
comment
Минор: Зачем псевдоним, если вы его не используете? - person sagi; 04.10.2018
comment
Спасибо, я пробовал это раньше, но я неправильно использовал псевдонимы для некоторых заголовков полей, которые затем испортили все остальное! Все работает теперь :) - person BobbyQ; 04.10.2018

Если для каждого столбца есть только 1 значение (что похоже на ваш образец данных), вы можете использовать методы агрегации:

SELECT t.id ,
       max(t.data1) as data1,
       max(t.data2) as data2,
       max(t.data3) as data3,
       max(t.data3) as data3
FROM YourTable t
GROUP BY t.id
person sagi    schedule 04.10.2018