sql只选择重复的行

Posted

技术标签:

【中文标题】sql只选择重复的行【英文标题】:sql select only duplicate rows 【发布时间】:2021-03-24 19:41:37 【问题描述】:

我在数据库中有一个表

username, ip 
A       , ipA1
A       , ipA1
B       , ipB1
A       , ipA1
C       , ipC1
A       , ipA2
C       , ipC2

我需要提取具有不同不同 ip 的同一用户的所有行

即结果:

username, ip 
A       , ipA1
C       , ipC1
A       , ipA2
C       , ipC2

【问题讨论】:

mysql 还是 Oracle 数据库?你用两者都标记了你的问题。如果您需要一个适用于两者的解决方案,您应该在问题中明确说明。如果实际上您只使用两者之一,请确保您的标签反映了这一点。 【参考方案1】:

一种方法是exists:

select distinct username, ip
from t
where exists (select 1 from t t2 where t2.username = t.username and t2.ip <> t.ip);

【讨论】:

【参考方案2】:
with
  my_table (username, ip) as (
    select 'A', 'ipA1' from dual union all
    select 'A', 'ipA1' from dual union all
    select 'B', 'ipB1' from dual union all
    select 'A', 'ipA1' from dual union all
    select 'C', 'ipC1' from dual union all
    select 'A', 'ipA2' from dual union all
    select 'C', 'ipC2' from dual
  )
select distinct username, ip
from   (
         select username, ip,
                min(ip) over (partition by username) as min_ip,
                max(ip) over (partition by username) as max_ip
         from   my_table
       )
where min_ip != max_ip
;


USERNAME IP  
-------- ----
A        ipA2
C        ipC1
C        ipC2
A        ipA1

【讨论】:

以上是关于sql只选择重复的行的主要内容,如果未能解决你的问题,请参考以下文章

SQL仅选择列上具有最大值的行[重复]

SQL仅选择列上具有最大值的行[重复]

SQL仅选择列上具有最大值的行[重复]

SQL仅选择列上具有最大值的行[重复]

SQL如何选择所有重复id的行,但不是每行的第一行?

SQL - 我需要制定一个条件来限制选择只显示与这两个条件相对应的行