• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

asp.net中sql语句的问题

JLZY881023 2010-03-09 08:06:29
我在写一个留言板程序,但是在获取所有留言时总是有错,有多条回复的留言会重复显示,请教各位这个的sql语句应该怎样写,我有三个表,一个Leaveword,一个Replies,一个ReplyLeaveword,ReplyLeaveword存放的是ReplyID,LeavewordID ,我是这样写的GETLEAVEWORDS = "SELECT Leavewords.*,Replies.Body AS ReplyBody FROM Leavewords "
+ "LEFT JOIN ReplyLeaveword ON Leavewords.LeavewordID = ReplyLeaveword.LeavewordID "
+ "LEFT JOIN Replies ON Replies.ReplyID = ReplyLeaveword.ReplyID "
+ " ORDER BY Leavewords.CreateTime DESC";
...全文
80 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
JLZY881023 2010-03-10
谢谢大家的回答,我尝试了一下DISTINCT 方法,出现如下错误“不能以 DISTINCT 方式选择 text、ntext 或 image 数据类型。”所以我想这个方法可能不太适用。
回复
chenyun122 2010-03-09
既然采用的是LEFT JOIN, Leaveword表可能对应有Replies回复人,也可能没有回复人(匿名)。
这种情况下,匿名回复多条一样的话,可能会出错,请确保LeavewordID的唯一性,并且建立ReplyLeaveword表与其他两张表的关系。
如果不存在没有回复人的情况,可以将Left Join 改成 inner join 避免重复。

SQL 语句拼装建议用StringBuilder替代String。
回复
Fibona 2010-03-09
因为你的Replies表中有多条回复,所以不能直接用LEFT JOIN ,所以可以采用先取子表最后回复的方式后,再连接,如下例子:


select a.* ,b.replyBody from 贴子表 a left join (

select dd.回复ID,ee.回复主题 from ( select max(c.回复ID),c.贴子ID from 贴子回复表 c group by c.贴子) dd inner join select 贴子回复表 ee on dd.回复ID=ee.回复ID ) b
on a.回复ID=b.回复ID


上面的sql语句没有经过测试,只是一个思路


回复
Sagy 2010-03-09
引用 2 楼 zaocha321 的回复:
引用 1 楼 cystudio 的回复:select后面加个distinct,可以去掉重复
应该是这样的

只有引用的内容不允许回复!
回复
狼王_ 2010-03-09
引用 1 楼 cystudio 的回复:
select后面加个distinct,可以去掉重复

应该是这样的
回复
cystudio 2010-03-09
select后面加个distinct,可以去掉重复
回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2010-03-09 08:06
社区公告
暂无公告