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";
...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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,可以去掉重复

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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