我有下表
表1
Emp ID | Emp Name
001 | ABC
002 | DEF
003 | GHI
004 | ABC
005 | XYZ
我正在尝试获取EMP ID和Emp Name,其中Emp Name相同但Emp ID不同。表中有主键
这里的输出将是
Emp ID | Emp Name
001 | ABC
004 | ABC
答案 0 :(得分:0)
按Emp_Name
分组,选择计数为Emp_ID
多个的记录,然后从具有Emp_Name
的表格中选择所有记录:
select Emp_ID, Emp_Name
from Table1
where Emp_Name in
(
select Emp_Name
from Table1
group by Emp_Name
having count(Emp_ID) > 1
)
答案 1 :(得分:0)
请尝试以下。
SELECT T1.* FROM
TABLE1 T1
JOIN
(
SELECT EMP_NAME, COUNT(EMP_ID) FROM TABLE1 GROUP BY EMP_NAME HAVING COUNT(EMP_ID) > 1
) T2 ON T1.EMP_NAME = T2.EMP_NAME
答案 2 :(得分:0)
昨天我遇到同样的问题:)我相信下面的代码会给你你想要的东西。
使用INNER JOIN
进行自我加入查询,然后使用HAVING
子句。
CREATE TABLE #Table1 (Emp_ID int, Emp_Name varchar(50))
INSERT INTO [#Table1]
(
[Emp_ID],
[Emp_Name]
)
SELECT '001','ABC'
UNION ALL SELECT '002','DEF'
UNION ALL SELECT '003','GHI'
UNION ALL SELECT '004','ABC'
UNION ALL SELECT '005','XYZ'
SELECT [t1].[Emp_ID], [t1].[Emp_Name] FROM [#Table1] t1
INNER JOIN
(
SELECT [#Table1].[Emp_Name] FROM [#Table1]
GROUP BY [#Table1].[Emp_Name]
HAVING COUNT([#Table1].[Emp_ID]) > 1
) t2
ON [t1].[Emp_Name] = [t2].[Emp_Name]
DROP TABLE [#Table1]
结果如下:
Emp_ID Emp_Name
1 ABC
4 ABC
<强> SQL Fiddle Demo - Click here 强>
答案 3 :(得分:0)
另一个EXISTS
版本,但没有任何汇总:
select t1.*
from tablename t1
where exists (select 1 from tablename t2
where t2.Emp_Name = t1.Emp_Name
and t2.Emp_ID <> t1.Emp_ID)
可能会加速一些事情。否则我会尝试自我加入版本:
select t1.*
from tablename t1
join tablename t2 on t2.Emp_Name = t1.Emp_Name
and t2.Emp_ID <> t1.Emp_ID
或许,根据数据,您需要执行SELECT DISTINCT
。
答案 4 :(得分:0)
您没有指定DBMS,因此这是ANSI SQL:
select emp_id, emp_name
from (
select emp_id, emp_name,
count(*) over (partition by emp_name) as name_count
from employee
) t
where name_count > 1^;