如何有效地选择所有重复项

时间:2011-06-28 09:02:08

标签: sql postgresql

我想选择具有表中已存在值的所有行。我找不到比

更好的解决方案
select * 
from provisioning_requests tt 
where code in (select code 
               from provisioning_requests tt2 
               where tt2.id <> tt.id)

这似乎有点幼稚。有人有更好的解决方案吗?

8 个答案:

答案 0 :(得分:14)

select * 
from provisioning_requests t1
 join (select code from provisioning_requests group by code having count(*)>1) t2
 ON t1.code = t2.code

OR

select * 
from provisioning_requests
 WHERE code in (select code from provisioning_requests group by code having count(*)>1)

答案 1 :(得分:8)

自动加入完成工作

select tt.* 
from provisioning_requests tt 
    INNER JOIN provisioning_requests tt2 
        ON tt.code = tt2.code
        AND tt2.id <> tt.id

答案 2 :(得分:2)

select t.*
from(
    select *, count(1) over(partition by code) as cnt
    from test
) as t
where t.cnt > 1

答案 3 :(得分:1)

您可以通过

监控行代码
select code 
from provisioning_requests tt 
group by code
having count(code) > 1

答案 4 :(得分:1)

如何使用distinct关键字?

SELECT col1, col2, col3, ..., DISTINCT(code) from provisioning_requests;

答案 5 :(得分:1)

您可以使用运算符exists,它可以产生更好的性能:

select * 
from provisioning_requests tt 
where exists
(
    select 1
    from provisioning_requests tt2
    where tt2.id <> tt.id and tt2.code = tt.code
)

答案 6 :(得分:1)

使用自联接以及代码列上的索引可能会使其表现更好。

select pr1.* from provisioning_requests pr1
join provisioning_requests pr2 on pr1.code = pr2.code and pr1.id <> pr2.id

答案 7 :(得分:0)

怎么样:

SELECT *,COUNT(*) FROM provisioning_requests HAVING COUNT(*)>1