【问题标题】:SQL merge results from multiple joined tables into a single view field (without union)SQL 将多个连接表的结果合并到一个视图字段中(无联合)
【发布时间】:2019-04-28 11:30:56
【问题描述】:

有没有办法将多个连接表的结果合并/组合到一个字段中?

两个关键细节:

  • 不得使用联合。
  • 必须能够使用代码生成视图。

我们有一个嵌套表结构,并且有相当多的条件逻辑,所以我想避免多次编写同一个大型查询(这就是为什么我试图避免使用 Union)。

select [Combine Id results from all 4 tables]
from Table1 tbl1
inner join Table2 tbl2 on tbl1.Id = tbl2.ParentId
inner join Table3 tbl3 on tbl2.Id = tbl3.ParentId
inner join Table4 tbl4 on tbl3.Id = tbl4.ParentId

所以如果表中包含以下数据:

Table 1
Id, ParentId
1, 1

Table 2
Id, ParentId
2, 1

Table 3
Id, ParentId
3, 2

Table 4
Id, ParentId
4, 3

是否可以使用原始查询中的连接结构生成以下单字段输出(整数列表)?:

Id
1
2
3
4

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    我认为apply 做你想做的事:

    select v.id
    from Table1 tbl1 inner join
         Table2 tbl2
         on tbl1.Id = tbl2.ParentId inner join
         Table3 tbl3
         on tbl2.Id = tbl3.ParentId inner join
         Table4 tbl4
         on tbl3.Id = tbl4.ParentId cross apply
         (values (tbl1.id), (tbl2.id), (tbl3.id), (tbl4.id)) v(id);
    

    【讨论】:

    • 我正在检查如何工作,但在这里遇到了 sintaxis 错误rextester.com/KBBM88215
    • @JuanCarlosOropeza 。 . . values() 列表缺少逗号。
    • Sql 演示:rextester.com/VRJT97711 正在工作。但仍然不明白交叉应用的工作原理:/
    • @JuanCarlosOropeza 。 . .它在技术上被称为横向连接(如果有帮助的话)。如果您正在学习,那么它基本上是 steriods 上的相关子查询——它可以返回多列和多行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2011-01-21
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多