SQL Query获取出现两次的名称

时间:2016-02-17 07:36:47

标签: sql

我有下表

表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

5 个答案:

答案 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^;