sql多表查询用到 distinct 问题,

happymingnan 2003-11-21 10:37:03
select mainlog.* from mainlog,sublog where mainlog.mainid=sublog.retomainid order by sublog.subid desc
发现 有重复记录,
我改用select distinct mainlog.* from mainlog,sublog where mainlog.mainid=sublog.retomainid order by sublog.subid desc

这样 查询分析器提示:
如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中。

我该怎么改呢,谢谢!
...全文
536 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
happymingnan 2003-11-23
  • 打赏
  • 举报
回复
上面的sql 语句看不大懂,
我还是直接在 主贴表 里加一个lastreplytime 字段吧,
等有用户 给主贴回复 就把 lastreplytime 改一下,这样按lastreplytime 来排序.
谢谢楼上大哥哥偶像们的回复,
还有大哥哥偶像们回复的时候可不可以加上点注释呢,这样我也看的明白点哦.^_^.
longfeisoft 2003-11-22
  • 打赏
  • 举报
回复
两个表都有重复记录吗?如果只是一个表有,那你可以用左连接或者右连接来连表查询

实在不行还有办法

比如说有表T 里面有 A,B,C 字段,其中A为主要的主键字段

select distinct A,(select distinct B from T tb where tb.A = ta.A) as B,(select distinct C from T tc where tc.A = ta.A) as C from T ta

但是要注意,A 和B、C不会是一对多的关系,否则,呵呵,也不行了。

反正关键的问题是,数据库在设计的时候就要用主键限制重复记录的。
happymingnan 2003-11-22
  • 打赏
  • 举报
回复
是这样的,我想做一个有回复功能的小论坛,用了两张表,一张是用来存储 "主"留言,
一张用来存储 给 主留言的 "回复" 留言,这样就可以根据 最后回复的时间来排序了.

然后用上述的select mainlog.* from mainlog,sublog where mainlog.mainid=sublog.retomainid order by sublog.subid desc
来挑选记录,
并输出有最近回复的主记录, 可是有重复记录,比如说有 一条主记录有3条回复留言,那么用这条sql语句 选就有三条 主记录,重复输出. 我该怎么办呢?
偶像! 赐教!
happymingnan 2003-11-22
  • 打赏
  • 举报
回复
是这样的,我想做一个有回复功能的小论坛,用了两张表,一张是用来存储 主留言,
一张用来存储 给主留言的 回复留言,这样就可以根据 最后回复的时间来排序了.

然后用上述的select mainlog.* from mainlog,sublog where mainlog.mainid=sublog.retomainid order by sublog.subid desc
来挑选记录,可有重复记录,比如说有 一条主记录有3条回复留言,那么用这条sql语句
选就有三条 主记录,重复输出.该怎么办呢?
happymingnan 2003-11-22
  • 打赏
  • 举报
回复
sql server 2000,
偶像有何指教呢,谢谢.
longfeisoft 2003-11-22
  • 打赏
  • 举报
回复
你先查一下,为什么有重复记录啊?
你用的是ORACLE数据库吧?
happymingnan 2003-11-22
  • 打赏
  • 举报
回复
错误提示:
服务器: 消息 8163,级别 16,状态 3,行 1
不能以 DISTINCT 方式选择 text、ntext 或 image 数据类型。

晕,该怎么办呢,该怎么去掉重复记录啊?
偶像,救我.
happymingnan 2003-11-22
  • 打赏
  • 举报
回复
group by (列出所有豢ta的字段)
这样可以吗?
happymingnan 2003-11-22
  • 打赏
  • 举报
回复
原来高手写东西都不加注释的,
longfeisoft 2003-11-22
  • 打赏
  • 举报
回复
select ta.*,max(tb.时间) from mainlog ta,sublog tb where ta.mainid=tb.retomainid group by (列出所有豢ta的字段)
order by max(tb.时间) desc
yonghengdizhen 2003-11-22
  • 打赏
  • 举报
回复
SELECT * FROM (SELECT mainlog.*,
(SELECT Max(ReplyDate) FROM sublog WHERE a.mainid=retomainid) AS LastReplyDate
FROM mainlog) ORDER BY LastReplyDate DESC
happymingnan 2003-11-22
  • 打赏
  • 举报
回复
最终问题:
论坛 中 按照最近一次的 回复 来提升 主贴 是怎么实现的?
数据库是怎么设计的?

偶像大哥哥们,帮我!

happymingnan 2003-11-22
  • 打赏
  • 举报
回复
问题1.
A 表 是 主表,
A 中的一条记录对应着 对应着 B中的N条记录,(因为B中的数据是回复给A中的某条记录的呀)
那我该怎么取 没有重复的A

问题2. 论坛 中 按照最近一次的 回复 来提升 主贴 是怎么实现的.(我就是要做这个)


yonghengdizhen 2003-11-21
  • 打赏
  • 举报
回复
select distinct mainlog.*,sublog.subid from mainlog,sublog where mainlog.mainid=sublog.retomainid order by sublog.subid desc
happymingnan 2003-11-21
  • 打赏
  • 举报
回复
我的偶像们 去哪里了呢,急!

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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