去掉重复记录的问题

时间:2022-03-24 23:50:16
假设现在有如下N条记录 表明叫article
id  author   title  
1   aaa      AAA
2   bbb      BBB
3   ccc      CCC
4   ddd      DDD
5   eee      AAA
现在想从这5条记录中查询所有title不重复的记录
select distinct title,author from article 这样是不可以的 因为distinct只能作用于一个字段
想请教应该怎么写 

13 个解决方案

#1


select a.* from tt a
inner join
(select title from tt group by title having count(*)=1) b
on a.title=b.title

#2


引用楼主 chenhui19820211 的帖子:
假设现在有如下N条记录 表明叫article 
id  author  title  
1  aaa      AAA 
2  bbb      BBB 
3  ccc      CCC 
4  ddd      DDD 
5  eee      AAA 
现在想从这5条记录中查询所有title不重复的记录 
select distinct title,author from article 这样是不可以的 因为distinct只能作用于一个字段 
想请教应该怎么写 

你试过吗?我在ORACLE上试过,貌似跟你要求的结果差不多

#3




select title,min(author)
from article 
group by title


#4


楼主是只要一个TITLE字段不重复,而author是有不同的

#5


引用 2 楼 xu54647265 的回复:
引用楼主 chenhui19820211 的帖子:
假设现在有如下N条记录 表明叫article
id  author  title
1  aaa      AAA
2  bbb      BBB
3  ccc      CCC
4  ddd      DDD
5  eee      AAA
现在想从这5条记录中查询所有title不重复的记录
select distinct title,author from article 这样是不可以的 因为distinct只能作用于一个字段
想请教应该怎么写

你试过吗?我在ORACLE上试过,貌似跟你要求的结果差不多

我试过的 不能这么写 如果是select distinct title from article 这样是可以的
我刚才试了一下这么写 达到我的要求了 select distinct title,author from article group by title
大家还有什么好方法吗

#6


select distinct a.* from tt a
inner join
(select title from tt group by title having count(*)=1) b
on a.title=b.title

条件应该写完全就行了。

如果title和author完全相同,用distinct去掉就行了。

#7


我的最新研究成果
select a.* from book a right join (
select max(id) id from book group by title) b on b.id = a.id
where a.id is not null

#8


引用 3 楼 ACMAIN_CHM 的回复:
SQL codeselecttitle,min(author)fromarticlegroupbytitle


试过了,可以达到要求,想知道那种方法的效率更高一点,因为数据量挺大的

#9


引用 7 楼 java2000_net 的回复:
我的最新研究成果
SQL codeselecta.*frombook arightjoin(selectmax(id) idfrombookgroupbytitle) bonb.id=a.idwherea.idisnotnull

看上去好像挺复杂的。。。。。

#10


这个查询效率还可以,你需要在title上做一个索引就行了。
其实就2步
1 select max(id) id from book group by title
拿到所有的按照title分组的最大id,这样能保证得到的id里不会有重复的title.

2 以这些id为基础,连接对应的表数据就行了。
不要用in (。。。) 用 join的性能更好,同样,主键上一定得有索引。

#11




如果title没有索引的情况下,两者差不多,
如果title上有索引的话,显然你的方法select distinct title,author from article group by title; 比较好。

#12


没错
select distinct title,author from book group by title;


这个效率明显更高,只不过不能出现id了,呵呵呵!

如果这个表还有其它的字段,那么使用id 做一次外连接的效率会高一些。

#13


多谢几位,问题解决了,也学到很多只是 结贴喽!

#1


select a.* from tt a
inner join
(select title from tt group by title having count(*)=1) b
on a.title=b.title

#2


引用楼主 chenhui19820211 的帖子:
假设现在有如下N条记录 表明叫article 
id  author  title  
1  aaa      AAA 
2  bbb      BBB 
3  ccc      CCC 
4  ddd      DDD 
5  eee      AAA 
现在想从这5条记录中查询所有title不重复的记录 
select distinct title,author from article 这样是不可以的 因为distinct只能作用于一个字段 
想请教应该怎么写 

你试过吗?我在ORACLE上试过,貌似跟你要求的结果差不多

#3




select title,min(author)
from article 
group by title


#4


楼主是只要一个TITLE字段不重复,而author是有不同的

#5


引用 2 楼 xu54647265 的回复:
引用楼主 chenhui19820211 的帖子:
假设现在有如下N条记录 表明叫article
id  author  title
1  aaa      AAA
2  bbb      BBB
3  ccc      CCC
4  ddd      DDD
5  eee      AAA
现在想从这5条记录中查询所有title不重复的记录
select distinct title,author from article 这样是不可以的 因为distinct只能作用于一个字段
想请教应该怎么写

你试过吗?我在ORACLE上试过,貌似跟你要求的结果差不多

我试过的 不能这么写 如果是select distinct title from article 这样是可以的
我刚才试了一下这么写 达到我的要求了 select distinct title,author from article group by title
大家还有什么好方法吗

#6


select distinct a.* from tt a
inner join
(select title from tt group by title having count(*)=1) b
on a.title=b.title

条件应该写完全就行了。

如果title和author完全相同,用distinct去掉就行了。

#7


我的最新研究成果
select a.* from book a right join (
select max(id) id from book group by title) b on b.id = a.id
where a.id is not null

#8


引用 3 楼 ACMAIN_CHM 的回复:
SQL codeselecttitle,min(author)fromarticlegroupbytitle


试过了,可以达到要求,想知道那种方法的效率更高一点,因为数据量挺大的

#9


引用 7 楼 java2000_net 的回复:
我的最新研究成果
SQL codeselecta.*frombook arightjoin(selectmax(id) idfrombookgroupbytitle) bonb.id=a.idwherea.idisnotnull

看上去好像挺复杂的。。。。。

#10


这个查询效率还可以,你需要在title上做一个索引就行了。
其实就2步
1 select max(id) id from book group by title
拿到所有的按照title分组的最大id,这样能保证得到的id里不会有重复的title.

2 以这些id为基础,连接对应的表数据就行了。
不要用in (。。。) 用 join的性能更好,同样,主键上一定得有索引。

#11




如果title没有索引的情况下,两者差不多,
如果title上有索引的话,显然你的方法select distinct title,author from article group by title; 比较好。

#12


没错
select distinct title,author from book group by title;


这个效率明显更高,只不过不能出现id了,呵呵呵!

如果这个表还有其它的字段,那么使用id 做一次外连接的效率会高一些。

#13


多谢几位,问题解决了,也学到很多只是 结贴喽!