SQL select语句避免基于主键的重复行

时间:2016-11-29 13:24:04

标签: sql postgresql

我有一个表雇员,有两列-empid(主键),name。假设它有三行以下。

$('.resumegame').on('click',function(){

    var gameId = $(this).data('id');

    // Do whatever you want here, 
    // you know the id of the button that has been clicked via the data-id attribute

});

如何编写select语句来选择记录,避免两行有重复的empid。我使用的查询如下:

EmpID   Name
---------------
11      Name1
12      Name2
11      Name3

但是这个查询会给出

select empid, name 
from(select empid, name, row_number() over(partition by empid order by empid desc) rnk
    from t)a 
where a.rnk=1

结果。但我需要的只是

EmpID   Name
---------------
11      Name1
12      Name2

4 个答案:

答案 0 :(得分:0)

SELECT max(empid) as empid, name from employee group by name having count(distinct empid) < 2不会有效吗?

答案 1 :(得分:0)

尝试此查询,这将有效,并为您提供第12行Name2

从员工a中选择empid,name 加入( 从员工中选择empid,count(empid)作为count1 由empid组成的 在a.empid = b.empid

上有计数(empid)= 1)b

答案 2 :(得分:0)

select empid, name 
from(select empid, name,count(*) over(partition by empid) cnt from t) t 
where cnt=1

答案 3 :(得分:0)

使用NOT EXISTS的{​​{3}}可能是最快的方法:

SELECT  empID, Name
FROM    T
WHERE   NOT EXISTS (SELECT 1 FROM T AS T2 WHERE T2.EmpID = T.EmpID AND T2.Name <> T.Name);

我没有进行任何测试,因此优化器可能能够使用count = 1操作生成反半连接,但这使其有可能获得该计划。< / p>