mysql - 消除 GROUP_CONCAT 中的重复行

标签 mysql sql group-by group-concat

我有使用此 sql 的重复记录:

SELECT emp.id, first_name, second_name, last_name, department, positions,  
            GROUP_CONCAT(email, " ", email_type SEPARATOR " || ") AS mails,
            GROUP_CONCAT(number, " ", number_type SEPARATOR " || ") AS numbers
            FROM geography.employee AS emp
            INNER JOIN geography.employee_email AS ee ON emp.id = ee.email_FK
            LEFT JOIN geography.employee_number AS en ON emp.id = en.number_FK
            WHERE first_name = 'John' AND last_name = 'Ausini'
            GROUP BY emp.id

所以我得到了这些邮件结果:

heyhey@abv.bg personal || heyhey@abv.bg personal || summer_geals@bwtc.co work || summer_geals@bwtc.co work || ivanov@abv.bg personal || ivanov@abv.bg personal 

对于数字:

+7654656656565 work || +7654656465655 personal || +7654656656565 work || +7654656465655 personal || +7654656656565 work || +7654656465655 personal

奇怪的是,在我的第二条记录中,邮件没有重复,邮件:

hei@abv.bg personal || hurei@abv.bg personal || burei@abv.bg personal || work@bwtc.com work

...但是在这个记录中我没有数字,也许这与顶部的记录不同。 我的预期输出不是重复每条记录的数据(对于第一个记录示例):

heyhey@abv.bg personal || summer_geals@bwtc.co work || ivanov@abv.bg personal

...而且数字也没有重复。 DISTINCT 也不起作用(如果我把它放在 SELECT 之后),我试过了,尽管我不喜欢掩盖这个问题。

我在表中的数据:

enter image description here

enter image description here

enter image description here

最佳答案

MySQL GROUP_CONCAT允许您指定 DISTINCT,它应该在连接之前消除重复项:

SELECT
    emp.id, first_name, second_name, last_name, department, positions,
    GROUP_CONCAT(DISTINCT email, " ", email_type SEPARATOR " || ") AS mails,
    GROUP_CONCAT(DISTINCT number, " ", number_type SEPARATOR " || ") AS numbers
FROM geography.employee AS emp
INNER JOIN geography.employee_email AS ee ON emp.id = ee.email_FK
LEFT JOIN geography.employee_number AS en ON emp.id = en.number_FK
WHERE first_name = 'John' AND last_name = 'Ausini'
GROUP BY emp.id

关于mysql - 消除 GROUP_CONCAT 中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51273329/

相关文章:

sql - 必须出现在postgresql的GROUP BY子句中

sql - 如何对时差超过一小时的记录进行分组?

mysql - 无法执行系统查询

php - 如何在 LIMIT 子句中应用 bindValue 方法?

mysql - 包括 NULL 月份

java.sql.SQLException : Can not issue data manipulation statements with executeQuery() 异常

javascript - 列不存在

mysql - 将自定义字段添加到基本客户端集成选项

php - 使用 PHP/PDO 将 future 10 分钟添加到 MySQL 数据库中

php - 如何使用 PHP 从数据库中获取特定值