合并两个或多个表,当您不知道要合并的表数时

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-function
Subs(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 的情况下合并两个不同的表

SQL怎样合并显示两个没有关联的表

如何合并两个 MySQL 表?

如何将多个文件进行合并?

当您不知道页数时,如何使用 Node.js 在 while 循环中向 API 发出多个分页 GET 请求?

合并具有不同列数的表