首页 > 解决方案 > MySQL 在邮件列表中组合人名

问题描述

我有一张表 Households 与 People 表是一对多的关系。我想为以下名称生成地址行:“HisFirst & HerFirst TheyLast”或“Joe & Jane Doe”之类的名称。这将作为地址标签的第一行。我的查询目前返回类似“Joe Doe & Jane Doe”的内容。所以你看到姓氏是多余的。我的查询如下。如何修改以获得我想要的结果?我尝试了基于性别和 IF/ELSE/THEN 的 CASE 语句。我也尝试嵌套这两种类型。我终于尝试连接 2 个选择语句,但不断返回多行 - 所以 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 个人属于“家庭”,则会将该人的姓名返回为“Jane Doe”,因此该部分可以正常工作。

标签: mysqlsql

解决方案


你真的不需要加入,因为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;

推荐阅读