sql语句 查重名 ?

时间:2022-09-18 19:36:57
表 ttt( name varchar(20), addr varchar(20))

其中 name有重复数据. 

怎么查出 name 重复的 内容.  没有重复的name不需要出现到结果里.

17 个解决方案

#1


select * from ttt t 
where exists(seelct 1 from ttt where name=t.name and addr<>t.addr)

#2


--创建测试环境
create table ttt
(
  name varchar(20),
  addr varchar(20)
)
insert ttt
select '张三','中国北京市' union all
select '李四','中国上海市' union all
select '王五','中国天津市' union all
select '张三','中国四川省'

--测试
select * from ttt t 
where exists(select 1 from ttt where name=t.name and addr<>t.addr)


--删除测试环境
drop table ttt

--结果
/*
name                 addr                 
-------------------- -------------------- 
张三                   中国北京市
张三                   中国四川省

(2 row(s) affected)
*/

#3


--或者:
select t.* from ttt t 
join ttt A on t.name=A.name and t.addr<>A.addr

#4


vivianfdlpw, 你这么快就上星了.
PFPF啊.

#5


vivian反应真快

addr 可以相同的呀. 还能用这方法吗?

#6


--创建测试环境
create table ttt
(
  name varchar(20),
  addr varchar(20)
)
insert ttt
select '张三','中国北京市' union all
select '李四','中国上海市' union all
select '王五','中国天津市' union all
select '张三','中国四川省'

--测试
declare @tb table(ID int identity,name varchar(20),addr varchar(20))
insert @tb(name,addr) select * from ttt
select name,addr from @tb t 
where exists(select 1 from @tb where name=t.name and ID<>t.ID)


--删除测试环境
drop table ttt

--结果
/*
name                 addr                 
-------------------- -------------------- 
张三                   中国北京市
张三                   中国四川省

(2 row(s) affected)
*/

#7


to filebat(Mark):
昨天就升星了:)

#8


试了一下,如果去掉 and t.addr<>A.addr 就不称哦

#9


表数据很大,建临时表 不妥吧.

而且 identity字段只能用于 sql server.

我现在只有oracle的环境.

求一个 可移植的,通用的方法.

#10


如果要建临时表, 
我宁愿在 c程序里来 计算了.
那样也只要遍历一次就好了.

#11


你的表只有这两个字段?

#12


--创建测试环境
create table ttt
(
  name varchar(20),
  addr varchar(20)
)
insert ttt
select '张三','中国北京市' union all
select '李四','中国上海市' union all
select '王五','中国天津市' union all
select '张三','中国北京市' union all
select '李四','中国深圳市'

--测试
select * from ttt t 
where 
     (select count(1) from ttt where name=t.name)>1
order by name

--删除测试环境
drop table ttt

--结果
/*
name                 addr                 
-------------------- -------------------- 
李四                   中国上海市
李四                   中国深圳市
张三                   中国北京市
张三                   中国北京市

(4 row(s) affected)
*/

#13


表 ttt( name varchar(20), addr varchar(20))

其中 name有重复数据. 
select * from ttt where name in (select name from ttt group by  name having count(name)>1)

#14


来晚了,好像问题已经解决了,项一下吧

#15


filebat(Mark)比较后知后觉,我天天上,昨天就发现 vivianfdlpw() 后面的东西好像少了,呵呵
 原来他升星了,可惜不熟,否则一定问候一句,呵呵

 问题都解决了,我也发一个,不过没有没有那么简便,惭愧:
select * from ttt t 
 where exists  (select top b.name  from (select top 2 t1.name from ttt t1 
where name=t1.name order by t1.name) b
where b.name = t.name)
order by name

#16


select * from ttt t 
where 
     (select count(1) from ttt where name=t.name)>1
order by name
好办法,呵呵学习!

#17


感谢各位,这个坛子气氛不错.
决定以后也多使用ms的产品.

#1


select * from ttt t 
where exists(seelct 1 from ttt where name=t.name and addr<>t.addr)

#2


--创建测试环境
create table ttt
(
  name varchar(20),
  addr varchar(20)
)
insert ttt
select '张三','中国北京市' union all
select '李四','中国上海市' union all
select '王五','中国天津市' union all
select '张三','中国四川省'

--测试
select * from ttt t 
where exists(select 1 from ttt where name=t.name and addr<>t.addr)


--删除测试环境
drop table ttt

--结果
/*
name                 addr                 
-------------------- -------------------- 
张三                   中国北京市
张三                   中国四川省

(2 row(s) affected)
*/

#3


--或者:
select t.* from ttt t 
join ttt A on t.name=A.name and t.addr<>A.addr

#4


vivianfdlpw, 你这么快就上星了.
PFPF啊.

#5


vivian反应真快

addr 可以相同的呀. 还能用这方法吗?

#6


--创建测试环境
create table ttt
(
  name varchar(20),
  addr varchar(20)
)
insert ttt
select '张三','中国北京市' union all
select '李四','中国上海市' union all
select '王五','中国天津市' union all
select '张三','中国四川省'

--测试
declare @tb table(ID int identity,name varchar(20),addr varchar(20))
insert @tb(name,addr) select * from ttt
select name,addr from @tb t 
where exists(select 1 from @tb where name=t.name and ID<>t.ID)


--删除测试环境
drop table ttt

--结果
/*
name                 addr                 
-------------------- -------------------- 
张三                   中国北京市
张三                   中国四川省

(2 row(s) affected)
*/

#7


to filebat(Mark):
昨天就升星了:)

#8


试了一下,如果去掉 and t.addr<>A.addr 就不称哦

#9


表数据很大,建临时表 不妥吧.

而且 identity字段只能用于 sql server.

我现在只有oracle的环境.

求一个 可移植的,通用的方法.

#10


如果要建临时表, 
我宁愿在 c程序里来 计算了.
那样也只要遍历一次就好了.

#11


你的表只有这两个字段?

#12


--创建测试环境
create table ttt
(
  name varchar(20),
  addr varchar(20)
)
insert ttt
select '张三','中国北京市' union all
select '李四','中国上海市' union all
select '王五','中国天津市' union all
select '张三','中国北京市' union all
select '李四','中国深圳市'

--测试
select * from ttt t 
where 
     (select count(1) from ttt where name=t.name)>1
order by name

--删除测试环境
drop table ttt

--结果
/*
name                 addr                 
-------------------- -------------------- 
李四                   中国上海市
李四                   中国深圳市
张三                   中国北京市
张三                   中国北京市

(4 row(s) affected)
*/

#13


表 ttt( name varchar(20), addr varchar(20))

其中 name有重复数据. 
select * from ttt where name in (select name from ttt group by  name having count(name)>1)

#14


来晚了,好像问题已经解决了,项一下吧

#15


filebat(Mark)比较后知后觉,我天天上,昨天就发现 vivianfdlpw() 后面的东西好像少了,呵呵
 原来他升星了,可惜不熟,否则一定问候一句,呵呵

 问题都解决了,我也发一个,不过没有没有那么简便,惭愧:
select * from ttt t 
 where exists  (select top b.name  from (select top 2 t1.name from ttt t1 
where name=t1.name order by t1.name) b
where b.name = t.name)
order by name

#16


select * from ttt t 
where 
     (select count(1) from ttt where name=t.name)>1
order by name
好办法,呵呵学习!

#17


感谢各位,这个坛子气氛不错.
决定以后也多使用ms的产品.