详细表结构是这样的:希望大家帮我出谋划策了..搞了三天了了.
ArticleID ChannelID ClassID Title
486 1011 5 abc
487 1022 5 cba
489 1039 9 abc
450 1039 5 abc
491 1039 6 aaa
大概有三万条吧..
功能:
1:把ChannelID=1039的数据全部取出来.
2:把取出来的数据,进行第二次取数据,如果ChannelID和ClassID和Title如果相等的话,就把数据取出来.
我试过了好多方法,好象都不完全正确..所以发上来给大家研究一下..
ArticleID ChannelID ClassID Title
486 1011 5 abc
487 1022 5 cba
489 1039 9 abc
450 1039 5 abc
491 1039 6 aaa
大概有三万条吧..
功能:
1:把ChannelID=1039的数据全部取出来.
2:把取出来的数据,进行第二次取数据,如果ChannelID和ClassID和Title如果相等的话,就把数据取出来.
我试过了好多方法,好象都不完全正确..所以发上来给大家研究一下..
1就不用说了
2:用1的结果,就是后3条纪录
可是ChannelID和ClassID和Title如果相等的话,怎么相等啊?是上下纪录,还是统一纪录
什么意思啊?
给出你希望的结果
489 1039 9 abc
450 1039 5 abc
491 1039 6 aaa
那为什么最后的结果是:abc,abc,abc
希望详细的说明下
486 1011 5 abc
487 1022 5 cba
489 1039 9 abc
450 1039 5 abc
491 1039 6 aaa
结果出来的应该是:abc,abc.
第一个abc因为ChannelID不相同,所以不显示出来.
select * from tbl a
where channelid=1039 and not exists( select * from tbl where channelid=1039
and a.channelid=channelid and a.classid=classid
and a.title=title and a.articleid>articleid)
ChannelID一样
489 1039 9 abc
450 1039 5 abc
491 1039 6 aaa
Title一样
489 1039 9 abc
450 1039 5 abc
ClassID 一样,没结果了
from (
select * from table where ChannelID='1039')a inner join
(
select * from table where ChannelID='1039')b
a.ClassID=b.ClassID and a.Title=b.Title and a.ArticleID<>b.ArticleID
from (
select * from PE_Article where ChannelID='1039')a inner join
(
select * from PE_Article where ChannelID='1039')b
a.ClassID=b.ClassID and a.Title=b.Title and a.ArticleID<>b.ArticleID
楼上的有错误.
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'from' 附近有语法错误。
结构:
Article ChannelID ClassID Title
2317 1035 98 小妖精
2318 1035 98 圣鹰
2319 1035 98 戴郎顿
2320 1035 98 MOTIMOHIEM
2329 1035 98 老人头
15541 1035 91 老人头
14122 1035 98 老人头
那么出来的结果是:只判断ChannelID,ClassID,Title,是否相等,相等就输出来.
group by ChannelID,ClassID,Title
having count(*)>=2
select a.ChannelID, a.ClassID,a.Title
from (
select * from PE_Article where ChannelID='1039')a inner join
(
select * from PE_Article where ChannelID='1039')b
a.ClassID=b.ClassID and a.Title=b.Title and a.ArticleID<>b.ArticleID
group by ChannelID,ClassID,Title
having count(*)>=2 or ChannelID='1019'//多写个or
from (select Article,ChannelID,ClassID,Title from PE_Article where ChannelID='1039') A inner join
(select Article,ChannelID,ClassID,Title from PE_Article where ChannelID='1039') B ON
a.ClassID=b.ClassID and a.Title=b.Title and a.Article<>b.Article这样,测试过了,按照你上面的数据 ,如果改成1035 的话 结果是
1035 98 老人头
我都很郁闷!
[email protected]
加下!
好像应该是
select ChannelID,ClassID,Title,count(*) from (select * from PE_Article ChannelID='1019')group by ChannelID,ClassID,Title
having count(*)>=2
--用or的话相当于两句语句,而不是两张表
(select ClassID,Title from tbl b
where ChannelID=1039
group by ClassID,Title
having count(*)>1
)
where a.ChannelID=1039 and a.ClassID=b.ClassID and a.Title=b.Title上面语句没有上机试,不知有没有错,但方法肯定可行。
就是先统计每种记录的条数,筛出两条及两条以上的,再在原纪录中找出来。
如果你没有得出准确的结果,你要检查记录数据是否规范,如有没有NULL值,前后空格,大小写等情况,像这种统计和筛选的工作,这都是要注意的。
(select ClassID,Title from tbl
where ChannelID=1039
group by ClassID,Title
having count(*)>1
) b
where a.ChannelID=1039 and a.ClassID=b.ClassID and a.Title=b.Title不好意思,回复后就发现了错误,内层查询的别名应该在括号外面!