mysql - 如何在mysql中将多行合并为一行

标签 mysql sql

我有一个连接 4 个表的查询。表是用户、user_info、电子邮件和电话。 一个用户可以有一个或多个电话和电子邮件。

这是sql查询:

SELECT ur.login_id as loginId, ue.user_email_address as email, up.phone_number as phone
      FROM greydeltadb.gd_user ur 
      LEFT JOIN greydeltadb.gd_user_info uri ON uri.user_id=ur.user_id  
      INNER JOIN greydeltadb.gd_user_emails ue ON ur.user_id = ue.user_id  
      INNER JOIN greydeltadb.gd_phone up  ON ur.user_id = up.user_id  
      ORDER BY ur.login_id

当我执行此查询时,对于拥有 2 封电子邮件和 2 部电话的用户,我会得到这样的结果:

loginId                  email                        phone
abc                      abc@gmail.com                123456
abc                      abc@gmail.com                798446
abc                      def@gmail.com                123456
abc                      def@gmail.com                798446

然后我了解到 GROUP_CONCAT() 更新后的查询是:

SELECT ur.login_id, GROUP_CONCAT(ue.user_email_address) as emails,
      GROUP_CONCAT(up.phone_number) as phones
      FROM greydeltadb.gd_user ur 
      LEFT JOIN greydeltadb.gd_user_info uri ON uri.user_id=ur.user_id  
      INNER JOIN greydeltadb.gd_user_emails ue ON ur.user_id = ue.user_id  
      INNER JOIN greydeltadb.gd_phone up  ON ur.user_id = up.user_id  
      GROUP BY ur.login_id  

此查询返回结果:

loginId                  email                                                                    phone
abc                      abc@gmail.com, def@gmail.com,abc@gmail.com, def@gmail.com                123456, 798446,123456, 798446

但我希望输出为:

loginId                  email                                        phone
abc                      abc@gmail.com, def@gmail.com                123456, 798446

请帮忙。

最佳答案

你只需要一个distinct

    SELECT ur.login_id, 
    GROUP_CONCAT(distinct ue.user_email_address) as 
    emails,
    GROUP_CONCAT(distinct up.phone_number) as 
     phones
     FROM greydeltadb.gd_user ur 
     LEFT JOIN greydeltadb.gd_user_info uri ON 
     uri.user_id=ur.user_id  
  INNER JOIN greydeltadb.gd_user_emails ue ON 
     ur.user_id = ue.user_id  
  INNER JOIN greydeltadb.gd_phone up  ON ur.user_id = 
  up.user_id  
  GROUP BY ur.login_id

关于mysql - 如何在mysql中将多行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53921774/

相关文章:

MySQL——查找字符串中最长的完整子串

asp.net - 如何针对在 Visual Studio 中看不到的数据库进行编程?

php - 当左连接列不存在时如何选择总和

sql - 如何在 yii 中编写此查询并在不使用 foreach 循环的情况下打印它?

插入本地数据库时出现Java空指针异常

MySQL 如何正确插入多个表?

mysql - 在mysql中不使用while循环将单行分成多行

c# - Fluent NHibernate - 自动架构构建

php - 从数据库中获取信息而无需注销并重新登录

SQL 查询 - 仅当不存在精确匹配时才使用 Like?