mysql - 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”,因此该部分可以正常工作。
解决方案
你真的不需要加入,因为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;
推荐阅读
- jenkins-pipeline - Jenkins 管道构建失败
- react-dates - react-dates:禁用默认日历弹出窗口
- postgresql - 如何正确关联课程、角色和教师(postgres)之间的关系?
- python - 如何将经过训练的 xgboost 基础模型参数加载到 xgboost sklearn API 中?
- json - 查询统计雪花表的json列中所有没有特定key的记录
- forms - 如何确保表单是顶部窗口
- flutter - 如何使这张卡片在飘动中飘浮玻璃效果?
- python - 聚合属于相同因变量的点
- php - 在 Laravel 8 中的 Ajax 请求期间无法从会话中放置/获取价值
- javascript - 编辑 textArea 时光标跳到最后一行的问题