Tsql 关于单个(注释)表的SQL查询的帮助(包括屏幕截图)

Tsql 关于单个(注释)表的SQL查询的帮助(包括屏幕截图),tsql,Tsql,请参见截图: 目标: 我想让注释嵌套在1级深度 将对评论进行安排,以便对家长的评分按降序排列 孩子们的评价与此无关 屏幕截图的左侧显示了Id喜欢的输出。RHS显示表格数据。所有评论都保存在表1中 我是SQL查询的初学者,我能做的最好的事情是: SELECT * FROM [Comments] WHERE ([ArticleId] = @ArticleId) ORDER BY [ThreadId] DESC, [DateMade] 这在一定程度上起到了作用,但显然忽略了评级。因此,上

请参见截图:

目标:

  • 我想让注释嵌套在1级深度
  • 将对评论进行安排,以便对家长的评分按降序排列
  • 孩子们的评价与此无关
屏幕截图的左侧显示了Id喜欢的输出。RHS显示表格数据。所有评论都保存在表1中

我是SQL查询的初学者,我能做的最好的事情是:

SELECT * 
FROM [Comments] 
WHERE ([ArticleId] = @ArticleId) ORDER BY [ThreadId] DESC, [DateMade] 
这在一定程度上起到了作用,但显然忽略了评级。因此,上面的语句将显示Bobs注释和所有孩子的注释在Amy和她的孩子的注释之前的输出。
我如何才能正确运行此查询?

我认为类似的情况可能会出现

选择子对象* 从注释父项,注释子项 其中parent.id=child.parent\u id 按父项排序。评级说明,日期说明

如果两个线程的评级相同,这将产生奇怪的结果,因此您也必须以某种方式订购

SELECT c.* 
FROM Comments AS c
JOIN Comments AS tr ON tr.threadID = c.threadID 
 AND tr.ArticleId = c.ArticleId AND tr.isParent = 1
WHERE (c.ArticleId = @ArticleId) 
ORDER BY tr.Rating DESC, c.ThreadId DESC, c.DateMade 
您必须将表本身连接到表中才能获得家长评分 然后,首先按线程级别排序,然后按线程id(如果许多线程具有相同的级别)排序,然后按注释日期排序


您不必在日期之前按
c.isParent DESC
进行int排序,因为这是线程中最早的注释

谢谢,我昨天花了一整天的时间想找点事做。我花了很多时间调查案情,但毫无结果。我甚至不考虑加入自己的桌子,感谢这种洞察力。向正在阅读的任何人澄清这个问题。1) 如果我把父母和孩子分别放在不同的桌子上,我会过得更好吗?2) 上面的查询被认为是“昂贵的”,还是在处理初始需求时需要的典型查询类型,只是想了解更多,谢谢1)我想不是。我想到的是存储一个额外的字段“threating”为了防止连接,必须在线程评级更改时更新1+n注释。2) 因为它是1:1连接,所以只要正确设置了索引以允许快速查找,就不会花费太多。