【发布时间】:2012-07-13 10:33:57
【问题描述】:
我需要将针对 MS SQL Server 2005 编写的 SQL 查询迁移到 Postgres 9.1。
在此查询中替换 CROSS APPLY 的最佳方法是什么?
SELECT *
FROM V_CitizenVersions
CROSS APPLY
dbo.GetCitizenRecModified(Citizen, LastName, FirstName, MiddleName,
BirthYear, BirthMonth, BirthDay, ..... ) -- lots of params
GetCitizenRecModified() 函数是一个表值函数。这个函数的代码我不能放,因为它实在是太大了,计算起来很困难,我不能放弃它。
【问题讨论】:
-
你不需要在 Postgres 中交叉应用。您可以像使用函数一样使用表函数。只需加入他们。
-
@a_horse_with_no_name -
CROSS APPLY使用相关参数重新执行 TVF,而不是执行一次然后加入结果。 -
我意识到这很古老...@MartinSmith 如果该函数属于内联表值类型,则在 MSSQL 上不一定是这种情况,请参阅 Paul White 关于 MSSQL 查询计划器如何编写的文章有时可以将
apply优化为join:sqlservercentral.com/articles/APPLY/69954 因为我们在这里看不到原始代码,所以我推测这就是根据Erwin 回答的评论重新表现发生的事情。
标签: sql postgresql postgresql-9.1 cross-apply lateral