我想选择具有表中已存在值的所有行。我找不到比
更好的解决方案select *
from provisioning_requests tt
where code in (select code
from provisioning_requests tt2
where tt2.id <> tt.id)
这似乎有点幼稚。有人有更好的解决方案吗?
答案 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