【问题标题】:SAP HANA alternative for cross apply交叉应用的 SAP HANA 替代方案
【发布时间】:2014-11-19 04:11:49
【问题描述】:

在 HANA sql 中是否有替代 MsSql 中可用的“交叉应用”运算符? 或者有没有办法为表中的值应用函数?类似的东西

select T.*, F.* from T cross join someFunction(T.Value) F

【问题讨论】:

  • SQL Server 中的cross apply 在标准SQL 中称为lateral join。也许这就是 Hana 正在使用的。
  • 也许不是(但是这首歌很好听)
  • 您能解释一下您期望的结果集是什么样的吗?
  • 与MsSql中相同:我想对表T中的每一行执行一个sql函数,并使用该函数返回的列值的值。我有一个不想用作子查询或联接的 sql 查询(太长且相同的查询将在多个地方使用)。我想通过适用于每个 T.Value 的函数返回该查询的输出。在谈论性能之前,您应该知道将有 0 - 5 条记录申请该函数。

标签: sql hana


【解决方案1】:

您可以在 SAP HANA 中使用交叉联接,这不是问题。 但是,如果您想将函数应用于 T.VALUE 的所有条目,则查询需要如下所示:

select T.*, someFunction(T.Value)
from T cross join F

【讨论】:

  • 只是说这不完全一样。在“from T cross join someFunction(T.Value) F”的情况下,该函数可以更改为 T 的每条记录返回的记录数。在“select T.*, someFunction(T.Value) from T cross”的情况下join F"表F中的记录数对于T的所有brecords将是相同的。
  • +1 给 Urbino 以提及上述内容。另一个限制是当您有一个要从中返回多个值的表值函数时(例如“select T.*, F.c1, F.c2 from T cross join someFunction(T.Value) F”):您必须重复函数调用并在 HANA 中编写“select T.*, (select c1 from someFunction(T.Value)), (select c2 from someFunction(T.Value)) from T”。
  • 抱歉,我对横向连接的确切作用有误解。但是,@mlkhammers 关于访问返回的列的评论在 SPS 11(当前 SAP HANA 版本)中不正确。您可以简单地通过 . 对列进行寻址,就好像它是一个普通的表一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 2018-03-30
相关资源
最近更新 更多