У меня есть большая таблица с данными, которые не уникальны, но должны быть. Эта таблица является результатом нескольких попыток объединения, поэтому не является фактической таблицей. Я не могу сделать его реальной таблицей по другим причинам.
Все таблицы UNION'd имеют столбец электронной почты, который в конечном итоге будет уникальным. Результирующие записи выглядят следующим образом:
1 [email protected] Ozzy
2 [email protected] Tony
3 [email protected] Steve
4 [email protected]
13 [email protected] Tony
14 [email protected] Ozzy
15 [email protected] Dave
16 [email protected] Tim
Как вы можете видеть, некоторые письма появляются более одного раза с разными именами или несуществующими именами. Когда я добавляю предложение GROUP BY email
в конце, результаты выглядят так:
1 [email protected] Ozzy
2 [email protected] Tony
3 [email protected] Steve
4 [email protected]
13 [email protected] Tony
Как вы можете видеть, адрес электронной почты 4 не имеет имени, потому что он выбрал первую запись с NULL
для имени. Затем я попытался использовать GROUP_CONCAT
, из-за чего результаты выглядели следующим образом:
1 [email protected] Ozzy
14 [email protected] Ozzy,Tony
15 [email protected] Dave,Steve
16 [email protected] Tim
13 [email protected] Tony
Как вы можете видеть, теперь у каждого есть имя, но некоторые строки содержат более одного имени. То, что я хочу сделать, это GROUP BY email
и выбрать первую запись NOT NULL
для каждого столбца для каждой строки, чтобы теоретически выглядеть так:
1 [email protected] Ozzy
2 [email protected] Tony
3 [email protected] Steve
4 [email protected] Tim
13 [email protected] Tony
Я пробовал использовать COALESCE
, но он не работает должным образом. Мой текущий запрос выглядит так:
SELECT
id,
email,
`name`
FROM
(
SELECT
email,
`name`
FROM
multiple_tables_and_unions
) AS emails
GROUP BY email
Я удалил код из временной таблицы, поскольку он содержит много таблиц, но все выбирают столбец email
и name
. По сути, мне нужна функция типа GROUP_COALESCE
, но, к сожалению, ее не существует. Каковы мои варианты?
Спасибо