首页 > 解决方案 > 一个字段相同,一个字段不同(MySQL)

问题描述

所以我在看这样一张桌子:

    TABLE NAME: DD
    --------------------------------------
    ID   | EMPLOYEE_ID  |       NAME     |   
    --------------------------------------
    1    |    100       | ABLE           |
    2    |    100       | ABLE           |
    3    |    101       | BAKER          |
    4    |    101       | CHARLIE        |
    5    |    102       | DOG            |
    6    |    102       | EASY           |
    7    |    102       | DOG            |
    --------------------------------------

有数千条记录,每个 EMPLOYEE_ID 至少有两次。我正在寻找一个查询,它将返回 EMPLOYEE_ID 相同但 NAME 不同的所有记录。所以像这样:

    --------------------------------------
    ID   | EMPLOYEE_ID  |       NAME     |   
    --------------------------------------
    3    |    101       | BAKER          |
    4    |    101       | CHARLIE        |
    5    |    102       | DOG            |
    6    |    102       | EASY           |
    --------------------------------------

我试过这个,理论上应该可以工作,但是由于临时订单空间不足而导致错误:

SELECT A.* 
FROM DD A
INNER JOIN DD B
 on A.EMPLOYEE_ID = B.EMPLOYEE_ID
 and A.NAME <> B.NAME
ORDER BY A.EMPLOYEE_ID

标签: mysqlsql

解决方案


这将为您提供您所要求的确切结果:

select min(id) ID
       , EMPLOYEE_ID
       , NAME
from DD
where EMPLOYEE_ID in ( select e_id 
                       from (SELECT name
                                    , count(EMPLOYEE_ID)
                                    , max(EMPLOYEE_ID) e_id
                             FROM DD 
                             group by name) a
                       group by e_id
                       having count(e_id) > 1 )
group by EMPLOYEE_ID
         , NAME;

这是一个演示

当他说:“这个代码是错误的。检查这个:dbfiddle.uk/...”时,forpas 是正确的这是另一个代码:

select min(id) ID
       , EMPLOYEE_ID
       , NAME
from DD
where EMPLOYEE_ID in ( SELECT distinct EMPLOYEE_ID e_id
                       FROM DD 
                       group by EMPLOYEE_ID
                       having count(distinct name) > 1 )
group by EMPLOYEE_ID
         , NAME;

这是一个演示

结果:

在此处输入图像描述


推荐阅读