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只选择重复的行的主要内容,如果未能解决你的问题,请参考以下文章