例如,我有一个包含以下列的表格:
pk_id,address,first_name,last_name
我有一个像这样的查询来显示重复的第一个名字和姓氏(重复)
select first_name,last_name
from table
group by first_name,last_name
having count(*)>1;
但上面的查询只返回名字和姓氏,但我想显示pk_id和地址,它们与这些重复的名字和姓氏联系在一起 我们可以使用联接在同一个表上执行此操作。请帮助!!
答案 0 :(得分:1)
一种简单的方法是使用pk_id
和重复计数构建视图。一旦你拥有它,只需要在基表上使用JOIN
,并使用过滤器来保留具有重复的行:
SELECT T.*
FROM T
JOIN (SELECT "pk_id",
COUNT(*) OVER(PARTITION BY "first_name", "last_name") cnt
FROM T) V
ON T."pk_id" = V."pk_id"
WHERE cnt > 1
答案 1 :(得分:0)
您必须从外部查询中调用它,如下所示:
select * from table
where first_name||last_name in
(select first_name||last_name from
(select first_name, last_name, count( * )
from table
group by first_name,last_name
having count( * ) > 1
)
)
注意:您可能不需要连接2个字段,但我还没有测试过。
答案 2 :(得分:0)
with
my_duplicates as
(
select
first_name,
last_name
from
my_table
group by
first_name,
last_name
having
count(*) > 1
)
select
bb.pk_id,
bb.address,
bb.first_name,
bb.last_name
from
my_duplicates aa
join my_table bb on
(
aa.first_name = bb.first_name
and
aa.last_name = bb.last_name
)
order by
bb.last_name,
bb.first_name,
bb.pk_id