我们可以在按功能分组使用时在同一个表中使用连接吗?

时间:2014-10-16 17:15:50

标签: sql oracle

例如,我有一个包含以下列的表格:

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和地址,它们与这些重复的名字和姓氏联系在一起 我们可以使用联接在同一个表上执行此操作。请帮助!!

3 个答案:

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

请参阅http://sqlfiddle.com/#!4/3ecd0/9

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