合并两个或多个表,当您不知道要合并的表数时
Posted
技术标签:
【中文标题】合并两个或多个表,当您不知道要合并的表数时【英文标题】: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-functionSubs(2)
union
Subs(3).
(结果应该是 id 为 2,3,4,5,6 的行)
问题是我不知道如何传递参数,也不知道如何动态使用联合。
是否可以在这个级别解决这个问题,还是我应该把它带到上层(C#)?
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于合并两个或多个表,当您不知道要合并的表数时的主要内容,如果未能解决你的问题,请参考以下文章
MySQL:在没有 JOIN 或 UNION 的情况下合并两个不同的表