【问题标题】:Union two or more tables, when you don't know the number of tables you are merging合并两个或多个表,当您不知道要合并的表数时
【发布时间】:2009-03-31 13:29:18
【问题描述】:

我正在使用 MS SQL 2005。 我已将树结构定义为:

1 
|\ 
2 3 
  /|\ 
 4 5 6 

我创建了一个 SQL 函数 Subs(id),它获取 id 并返回子树表。 所以,Subs(3) 将返回 4 行,3,4,5,6,而 Subs(2) 将返回 1 行,2。

我有一个返回上述 Id 的 select 语句(将此树与其他表连接)

我想要在返回上述ID的select语句之后
(这将产生一个包含例如 2 行的表:)

2
3

能够以

的身份运行 Subs-function
Subs(2) 
union 
Subs(3).

(结果应该是 id 为 2,3,4,5,6 的行)

问题是我不知道如何传递参数,也不知道如何动态使用联合。

是否可以在这个级别解决这个问题,还是我应该把它带到上层(C#)?

【问题讨论】:

    标签: sql sql-server sql-server-2005 user-defined-functions


    【解决方案1】:

    我认为您在这里不需要 UNION,使用 SQL Server 2005 您可以使用 CROSS APPLY 实现所需的结果:

    select 
        f.* 
    from 
        resultsTable rt
        cross apply dbo.subs(rt.ID) f
    

    假设resultTable是存储你第一次查询结果的,字段名是ID

    【讨论】:

      【解决方案2】:

      我想你想了解一下Recursive Common Table Expressions

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-16
        相关资源
        最近更新 更多