我正在尝试创建一个论坛设置,您可以在其中对特定帖子发表评论,并将回复按日期顺序显示在父项的正下方。父级下面只有一个子级别。这是示例数据集:
ID.ParentID.Datestamp
12.NULL.2013-03-01 1:00pm
13.NULL.2013-03-01 2:00pm
14.12.2013-03-01 2:20pm
15.12.2013-03-01 2:30pm
16.NULL.2013-03-01 3:30pm
这就是我想要最终得到的:
12.NULL.2013-03-01 1:00pm
14.12.2013-03-01 2:20pm
15.12.2013-03-01 2:30pm
13.NULL.2013-03-01 2:00pm
16.NULL.2013-03-01 3:30pm
我知道我需要某种CTE,但这不会在适当的父项下对子项进行排序(显然,因为没有ORDER BY子句);我不知道正确的顺序。谁能提供一些见识?
; WITH Messages
AS
(
SELECT ID, ParentID, Datestamp
FROM ForumMessages
WHERE ParentID IS NULL
-- Recursive
UNION ALL
SELECT
t2.ID, t2.ParentID, t2.Datestamp
FROM
ForumMessages AS t2
JOIN Messages AS m ON t2.ParentID = m.ID
)
SELECT ID, ParentID, Datestamp
FROM Messages
对于单个级别的深度,您无需使用递归-尝试:
SELECT ID, ParentID, Datestamp
FROM ForumMessages
order by coalesce(ParentID,ID), Datestamp
问题内容: 假设这张table 我将如何编写简单的CTE(或其他类型的查询),以在任何级别返回它们的父/子关系,但将所有子项的排序顺序保持在父项之下。 基本上,这将是一个简单的树视图,其中的子项目按特定的排序顺序进行排序。 SQL Server 2008是数据库 更新:可以有无限个父级/子级-我尝试了其他堆栈问题/答案中的一些示例,但没有一个在子级中包含排序顺序。 示例结果应为: 等等。 希望这是
问题内容: 我们有一个带有父子关系的表,希望对它进行排序。排序标准是这样的,以便在遍历结果时,与父ID匹配的行应该已经存在: 问题在于两个密钥都是字符串,因此按ID或PARENT_ID排序将无法解决问题。 问题答案: 对于Oracle,使用分层查询:
问题内容: 我正在尝试执行我认为使用CTE进行递归比较困难的事情是SQL Server 2008。 在下面的示例中,您可以假设固定深度为3 …没有任何比这更低的深度了。在现实生活中,深度是“更深的”,但仍然是固定的。在示例中,我尝试将其简化一些。 我的输入数据如下。 我的CTE的输出应为下表。 如果我可以在输出中获得ID列,则可以肯定地可以映射到查找表中的名称。 我也乐于接受其他方法来完成此任务,
问题内容: 在SQL中是否可以在同一查询的另一个CTE内的Common Table Expression内使用引用?这里有一个例子: 我在SQLite3中尝试了此方法,并且它起作用了,我只是想知道它是否是标准SQL的一部分。关于此论点的任何建议将不胜感激。非常感谢你! 问题答案: 这是CTE的三个重要属性: 您可以在后续的CTE中或查询的主体中引用CTE。 您可以多次引用任何给定的CTE。 CTE
问题内容: 我的数据库中有一个页面表,每个页面可以有一个父项,如下所示: 如果选择一个以上级别,那么最好的MySQL查询是最好的选择父级,子级,子级顺序的所有页面的查询,最多三个级别。上面的示例将产生所需的顺序: 问题答案: 我认为您应该在表中再添加一个字段,称为level并将其存储在节点的level中,然后按级别然后按父级对查询进行排序。
问题内容: 我有一个CTE,它是表上的一条select语句。现在,如果我从CTE中删除了1行,它会从我的基本表中删除该行吗? 如果我有一个临时表而不是CTE,是否也是如此? 问题答案: 检查DELETE语句文档, 可以 ,您可以使用CTE进行删除,这会影响基础表。同样对于UPDATE语句… 如果我有一个临时表而不是CTE,是否也是如此? 不,从临时表中删除只会影响临时表-与数据所来自的表没有任何关