从两列中查找重复项,但显示所有行MySQL

时间:2015-07-29 03:34:39

标签: mysql count group-by duplicates having

我有一张这样的表

| user_id | company_id | employee_id |
|---------|------------|-------------|
|    1    |      2     |     123     |
|    2    |      2     |     123     |
|    3    |      5     |     432     |
|    4    |      5     |     432     |
|    5    |      7     |     432     |

我有一个看起来像这样的查询

SELECT COUNT(*) AS Repeated, employee_id, GROUP_CONCAT(user_id) as user_ids, GROUP_CONCAT(username)
    FROM user_company
    INNER JOIN user ON user.id = user_company.user_id
        WHERE employee_id IS NOT NULL
        AND user_company.deleted_at IS NULL
        GROUP BY employee_id, company_id
        HAVING Repeated >1;

我得到的结果看起来像这样

| Repeated | employee_id | user_ids   |
|---------|--------------|------------|
|    2    |      123     |   2,3      |
|    2    |      432     |   7,8      |

我需要看起来像这样的结果

| user_id |
|---------|
|    2    |
|    3    |
|    7    |
|    8    |

我意识到我的查询越来越多,但这只是为了确保我获得正确的数据。现在,我需要在新行中获取单个列结果,每个user_id用于基于另一个查询中的user_id进行更新。我只是通过选择user_id来尝试这个,但我只得到两行,我需要所有四行重复。

有关如何修改查询的任何想法?

2 个答案:

答案 0 :(得分:2)

以下是获取所有user_id的查询:

SELECT user_id 
FROM user_company uc 
INNER JOIN 
( 
   SELECT employee_id, company_id
   FROM user_company 
   WHERE employee_id IS NOT NULL
   AND deleted_at IS NULL
   GROUP BY employee_id, company_id
   HAVING COUNT(employee_id) >1
) AS `emps`
ON emps.employee_id = uc.`employee_id`
AND emps.company_id = uc.`company_id`;

答案 1 :(得分:1)

以下查询将生成您要查找的查询。

    SELECT CONCAT('UPDATE user_company SET employee_id = null WHERE user_id IN (', GROUP_CONCAT(user_id SEPARATOR ', '),')') AS user_sql
    FROM    user_company uc
    INNER JOIN 
    (SELECT employee_id, company_id
       FROM user_company 
       WHERE employee_id IS NOT NULL
       AND deleted_at IS NULL
       GROUP BY employee_id, company_id
       HAVING COUNT(employee_id) >1) AS `emps`
       ON emps.employee_id = uc.`employee_id`
       AND emps.company_id = uc.`company_id`;