当前位置: 首页 > 面试题库 >

SQL-使用CTE对另一个CTE的引用

章哲彦
2023-03-14
问题内容

在SQL中是否可以在同一查询的另一个CTE内的Common Table Expression内使用引用?这里有一个例子:

WITH CT1 AS (SELECT * FROM T),
     CT2 AS (SELECT * FROM CT1)

SELECT * FROM CT2;

我在SQLite3中尝试了此方法,并且它起作用了,我只是想知道它是否是标准SQL的一部分。关于此论点的任何建议将不胜感激。非常感谢你!


问题答案:

这是CTE的三个重要属性:

  • 您可以在后续的CTE中或查询的主体中引用CTE。

  • 您可以多次引用任何给定的CTE。

  • CTE可以from在其他子查询中任何嵌套级别的子句中使用。

与使用SQL中的所有内容一样,需要定义CTE,然后再使用它们。因此,您不能以随机顺序定义它们。

这是CTE的标准定义,并且很好地解释了如何在数据库中使用它们。这三个属性是它们与子查询不同的关键方式。



 类似资料:
  • 问题内容: 我有这个,在设定的总数时我得到一个错误。为什么我不能多次访问CTE? 问题答案: A基本上是一次性视图。它只保留一个语句,然后自动消失。 您的选择包括: 重新定义第二次。从定义的末尾到您的之前,这就像复制粘贴一样简单。 将结果放入表格或变量中 将结果具体化为真实表并引用 稍微更改一下即可,只需从您的CTE: 。

  • 问题内容: 扩展以下问题(多重选择语句),我想知道是否可以执行以下操作: 所以这里的重点是以下几行: 我在cte2中的哪里引用cte1? 问题答案: 是的,您可以在后续CTE中引用先前声明的CTE: 笔记 在cte1声明中加入cte2无效,因为该语句是自上而下执行的。 您可以根据需要使用JOINing来引用CTE,就像引用任何其他内联视图(它)或table / temp table / etc一样

  • 问题内容: 我有一个类似以下的查询: 为了避免多次重复相同的表达式:我想定义一个CTE,并在select,where和group by表达式中使用查询该表 不幸的是,这不起作用,因为在创建 还有什么其他方法可以使我不重复这么多次? 问题答案: 使用,可用于定义别名字段,然后引用它们: 该仅仅是一个别名,不管你喜欢,你可以将其命名。

  • 问题内容: 我正在尝试执行我认为使用CTE进行递归比较困难的事情是SQL Server 2008。 在下面的示例中,您可以假设固定深度为3 …没有任何比这更低的深度了。在现实生活中,深度是“更深的”,但仍然是固定的。在示例中,我尝试将其简化一些。 我的输入数据如下。 我的CTE的输出应为下表。 如果我可以在输出中获得ID列,则可以肯定地可以映射到查找表中的名称。 我也乐于接受其他方法来完成此任务,

  • 问题内容: 我正在尝试创建一个论坛设置,您可以在其中对特定帖子发表评论,并将回复按日期顺序显示在父项的正下方。父级下面只有一个子级别。这是示例数据集: 这就是我想要最终得到的: 我知道我需要某种CTE,但这不会在适当的父项下对子项进行排序(显然,因为没有ORDER BY子句);我不知道正确的顺序。谁能提供一些见识? 问题答案: 对于单个级别的深度,您无需使用递归-尝试:

  • 问题内容: 我需要一个游标用于以下查询,以便可以循环访问以获取/更新/插入一些其他数据。有人可以帮我吗? 我尝试了很多方法,但是没有找到任何可行的方法。 我正在使用 还是我出错了 问题答案: 只需将其放在通用表表达式之前即可: (但是,插入关于游标的通常的警告几乎总是会成为错误的工作工具。如果您可以找到一种以基于集合的方式完成整个操作的方法,则通常是更可取的,并且可能会表现得更好(或者至少会更好)