MySQL объединяет имена людей, как в списке рассылки

0

У меня есть столовые домохозяйства, которые являются отношениями друг к другу с таблицей People. Я хочу создать адресную строку для имен, таких как "HisFirst & HerFirst ItsLast", или что-то вроде "Joe & Jane Doe". Это будет первой линией адресной метки. Мой запрос в настоящее время возвращает что-то вроде "Joe Doe & Jane Doe". Таким образом, вы видите, что фамилия является избыточной. Мой запрос ниже. Как я могу изменить, чтобы получить желаемый результат? Я попробовал инструкции CASE по полу и IF/ELSE/THEN. Я также пытался гнездовать оба типа. Я, наконец, попытался объединить 2 оператора select, но продолжал возвращать несколько строк - поэтому MySQL вызвал исключение.

SELECT 
  GROUP_CONCAT(People.FName, ' ', People.LName ORDER BY Gender DESC SEPARATOR ' & ') AS 'HouseholdName'
FROM Households 
LEFT JOIN People
  ON Households.HouseholdID = People.HouseholdID 
GROUP BY
  Households.HouseholdID

Пол - 2 для мужчин и 1 для женщин.

Если только один человек принадлежит к "домохозяйству", он возвращает имя одного человека как "Джейн Доу", так что часть работает нормально.

Теги:

1 ответ

1

Вам действительно не нужно присоединяться, так как у People уже есть HouseholdID.

SELECT 
  CONCAT(GROUP_CONCAT(People.FName ORDER BY Gender DESC SEPARATOR ' & '), ' ', People.LName)
  AS 'HouseholdName'
FROM People
GROUP BY
  People.HouseholdID, People.LName;
  • 0
    Работает отлично! Я полностью пропустил конструкцию CONCAT (GROUP_CONCAT. У меня есть еще один связанный вопрос, если это разрешено здесь: что, если два человека в списке не имеют одинаковую фамилию?
  • 0
    Мой ответ тоже об этом позаботится, так как группировка выполняется по familyID и LName . Если у них нет имени, группировка будет производиться по их ID семьи.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню