去掉重复记录的问题

chenhui19820211 2009-05-06 02:52:35
假设现在有如下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只能作用于一个字段
想请教应该怎么写
...全文
296 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhui19820211 2009-05-06
  • 打赏
  • 举报
回复
多谢几位,问题解决了,也学到很多只是 结贴喽!
老紫竹 2009-05-06
  • 打赏
  • 举报
回复
没错
select distinct title,author from book group by title;


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

如果这个表还有其它的字段,那么使用id 做一次外连接的效率会高一些。
ACMAIN_CHM 2009-05-06
  • 打赏
  • 举报
回复

如果title没有索引的情况下,两者差不多,
如果title上有索引的话,显然你的方法select distinct title,author from article group by title; 比较好。
老紫竹 2009-05-06
  • 打赏
  • 举报
回复
这个查询效率还可以,你需要在title上做一个索引就行了。
其实就2步
1 select max(id) id from book group by title
拿到所有的按照title分组的最大id,这样能保证得到的id里不会有重复的title.

2 以这些id为基础,连接对应的表数据就行了。
不要用in (。。。) 用 join的性能更好,同样,主键上一定得有索引。
chenhui19820211 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 java2000_net 的回复:]
我的最新研究成果
SQL codeselecta.*frombook arightjoin(selectmax(id) idfrombookgroupbytitle) bonb.id=a.idwherea.idisnotnull
[/Quote]
看上去好像挺复杂的。。。。。
chenhui19820211 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ACMAIN_CHM 的回复:]
SQL codeselecttitle,min(author)fromarticlegroupbytitle


[/Quote]
试过了,可以达到要求,想知道那种方法的效率更高一点,因为数据量挺大的
老紫竹 2009-05-06
  • 打赏
  • 举报
回复
我的最新研究成果
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
老紫竹 2009-05-06
  • 打赏
  • 举报
回复
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去掉就行了。
chenhui19820211 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 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上试过,貌似跟你要求的结果差不多
[/Quote]
我试过的 不能这么写 如果是select distinct title from article 这样是可以的
我刚才试了一下这么写 达到我的要求了 select distinct title,author from article group by title
大家还有什么好方法吗
WWWWA 2009-05-06
  • 打赏
  • 举报
回复
楼主是只要一个TITLE字段不重复,而author是有不同的
ACMAIN_CHM 2009-05-06
  • 打赏
  • 举报
回复

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


xu54647265 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 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只能作用于一个字段
想请教应该怎么写
[/Quote]
你试过吗?我在ORACLE上试过,貌似跟你要求的结果差不多
WWWWA 2009-05-06
  • 打赏
  • 举报
回复
select a.* from tt a
inner join
(select title from tt group by title having count(*)=1) b
on a.title=b.title

56,681

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧