mysql - 一个字段相同,一个字段不同(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
解决方案
这将为您提供您所要求的确切结果:
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;
结果:
推荐阅读
- reactjs - React Typescript取消对打字稿错误的执行中断
- python - 使用请求获取重定向 URL
- linux - cron 条目执行了两次
- javascript - 如何将对象键转换为 Javascript 中键值倍数的元素数组?
- mysql - 了解在 MySQL 中设置 ONLY_FULL_GROUP_BY sql 模式的非标准 GROUP BY
- javascript - 单击内容中的链接时,Twitter Bootstrap 手风琴崩溃
- python - Flask SQL - 插入记录时是否可以动态设置列
- javascript - 提交表单时页面重新加载,控制台上没有打印
- java - 如何在 Windows 上的 Java 中使用 OpenCV 4.4.0(带有 contrib 模块)?
- python - setUpClass(cls) 功能块未通过 Selenium 使用 python-unittest 执行