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
inner join
(select title from tt group by title having count(*)=1) b
on a.title=b.title
#2
你试过吗?我在ORACLE上试过,貌似跟你要求的结果差不多
#3
select title,min(author)
from article
group by title
#4
楼主是只要一个TITLE字段不重复,而author是有不同的
#5
我试过的 不能这么写 如果是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去掉就行了。
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
试过了,可以达到要求,想知道那种方法的效率更高一点,因为数据量挺大的
#9
看上去好像挺复杂的。。。。。
#10
这个查询效率还可以,你需要在title上做一个索引就行了。
其实就2步
1 select max(id) id from book group by title
拿到所有的按照title分组的最大id,这样能保证得到的id里不会有重复的title.
2 以这些id为基础,连接对应的表数据就行了。
不要用in (。。。) 用 join的性能更好,同样,主键上一定得有索引。
其实就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
没错
这个效率明显更高,只不过不能出现id了,呵呵呵!
如果这个表还有其它的字段,那么使用id 做一次外连接的效率会高一些。
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
inner join
(select title from tt group by title having count(*)=1) b
on a.title=b.title
#2
你试过吗?我在ORACLE上试过,貌似跟你要求的结果差不多
#3
select title,min(author)
from article
group by title
#4
楼主是只要一个TITLE字段不重复,而author是有不同的
#5
我试过的 不能这么写 如果是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去掉就行了。
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
试过了,可以达到要求,想知道那种方法的效率更高一点,因为数据量挺大的
#9
看上去好像挺复杂的。。。。。
#10
这个查询效率还可以,你需要在title上做一个索引就行了。
其实就2步
1 select max(id) id from book group by title
拿到所有的按照title分组的最大id,这样能保证得到的id里不会有重复的title.
2 以这些id为基础,连接对应的表数据就行了。
不要用in (。。。) 用 join的性能更好,同样,主键上一定得有索引。
其实就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
没错
这个效率明显更高,只不过不能出现id了,呵呵呵!
如果这个表还有其它的字段,那么使用id 做一次外连接的效率会高一些。
select distinct title,author from book group by title;
这个效率明显更高,只不过不能出现id了,呵呵呵!
如果这个表还有其它的字段,那么使用id 做一次外连接的效率会高一些。
#13
多谢几位,问题解决了,也学到很多只是 结贴喽!