【问题标题】:Can I use multiple "with"?我可以使用多个“with”吗?
【发布时间】:2011-07-19 12:55:41
【问题描述】:

举例:

With DependencedIncidents AS
(
    SELECT INC.[RecTime],INC.[SQL] AS [str] FROM
    (
        SELECT A.[RecTime] As [RecTime],X.[SQL] As [SQL] FROM [EventView] AS A 
        CROSS JOIN [Incident] AS X
            WHERE
                patindex('%' + A.[Col] + '%', X.[SQL]) > 0
    ) AS INC
)

With lalala AS
(
    SELECT INC.[RecTime],INC.[SQL] AS [str] FROM
    (
        SELECT A.[RecTime] As [RecTime],X.[SQL] As [SQL] FROM [EventView] AS A 
        CROSS JOIN [Incident] AS X
            WHERE
                patindex('%' + A.[Col] + '%', X.[SQL]) > 0
    ) AS INC
)

...不起作用。 “错误附近”。

另外,我想使用 first with inside second with。是真的还是我需要使用临时表?

【问题讨论】:

标签: sql tsql sql-server-2008


【解决方案1】:

是的 - 这样做:

WITH DependencedIncidents AS
(
  ....
),  
lalala AS
(
  ....
)

您无需重复 WITH 关键字

【讨论】:

  • 拉拉拉可以使用DependencedIncidents吗?
  • DependencedIncidents 可以使用 lalala 吗?
  • @HenryYang: 不 - 后面的 CTE (lalala) 可以使用之前定义的任何 CTE - 但前面的 CTE 不能使用稍后才会定义的 CTE... .
【解决方案2】:

试试:

With DependencedIncidents AS
(
    SELECT INC.[RecTime],INC.[SQL] AS [str] FROM
    (
        SELECT A.[RecTime] As [RecTime],X.[SQL] As [SQL] FROM [EventView] AS A 
        CROSS JOIN [Incident] AS X
            WHERE
                patindex('%' + A.[Col] + '%', X.[SQL]) > 0
    ) AS INC
),
lalala AS
(
    SELECT INC.[RecTime],INC.[SQL] AS [str] FROM
    (
        SELECT A.[RecTime] As [RecTime],X.[SQL] As [SQL] FROM [EventView] AS A 
        CROSS JOIN [Incident] AS X
            WHERE
                patindex('%' + A.[Col] + '%', X.[SQL]) > 0
    ) AS INC
)

是的,您可以在公用表表达式定义中引用公用表表达式。甚至递归。这导致了一些非常neat tricks。

【讨论】:

  • 对于那些像我一样没有立即注意到它的人,这里的问题是在原始 with 语句之后添加一个逗号。哈哈
  • 不再写with这个词
  • 嗨,这是否相当于两个表之间的交叉连接。或者这会创建两个单独的表。我不想交叉连接两个非常大的表,有没有办法有效地创建两个单独的“with”表
  • @LongLe 不,它们不等同于连接,它们不是表。这些是 CTE - 通用表表达式。它们更像...命名查询,您可以像使用表一样使用它们...或者更像视图。请谷歌他们。他们很整洁。它是最好的标准 SQL 功能之一,极大地帮助保持复杂查询的可理解性和可控性。
  • 对于那些不知道什么是“常用表表达式”的人,在给出的示例中它们是“DependencedIncidents”和“lalala”。详情请见docs.microsoft.com/en-us/sql/t-sql/queries/…。
猜你喜欢
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 2012-04-09
相关资源
最近更新 更多