在Oracle SQL中找不到唯一的行

时间:2014-09-29 14:03:22

标签: sql oracle having-clause

我有一个看似简单的问题,但我无法弄明白。

我有以下几点:

   Name Zipcode

    ER 5354
    OL 1234
    AS 1234
    BH 3453
    BH 3453
    HZ 1234

我想找到那些ID没有明确定义一行的行。

所以我想在这里看到:

   OL 1234
   AS 1234
   HZ 1234

或者仅仅是邮政编码。

对不起,我忘了提到一个重要的部分。如果名称相同则不是问题,只有相同的邮政编码有不同的名称。 所以这意味着:BH 3453不会返回

3 个答案:

答案 0 :(得分:7)

我认为这就是你想要的

select zipcode
from yourTable
group by zipcode
having count(*) > 1

选择与多个记录关联的zipcodes

回答您更新的问题:

select zipcode
from
(
  select name, zipcode
  from yourTable
  group by name, zipcode
)
group by zipcode
having count(*) > 1

应该这样做。它在性能方面可能不是最佳的,在这种情况下,您可以使用@ a1ex07

建议的窗口函数

答案 1 :(得分:2)

如果您只需要zipcode,请使用 vc 74 的解决方案。对于所有列,基于窗口函数的解决方案应该优于自联接方法:

SELECT a.zipcode, a.name 
FROM 
(
   SELECT zipcode, name, count(1) over(partition by zipcode) as cnt
   FROM your_table
)a
WHERE a.cnt >1

答案 2 :(得分:1)

试试这个:

select yt.*
  from YOUR_TABLE yt
     , (select zipcode
          from YOUR_TABLE
         group by zipcode
        having count(*) > 1
       ) m
 where yt.zipcode = m.zipcode