【发布时间】:2018-01-09 02:36:29
【问题描述】:
我想分享我们如何在不使用 CROSS APPLY 的情况下实现功能。[适用于 NETEZZA SQL]。
以下查询使用交叉申请来检索每周 FOF 的最后 52 周:
SELECT t1.col,
t3.col AS col_last52wks
FROM TABLE1 t1
CROSS APPLY (
SELECT TOP 52 t2.col
FROM TABLE2 t2
WHERE t2.col <= t1.col
ORDER BY t2.col DESC
) t3
--Last 13 Weeks Condition
WHERE t1.col >= minvalue -- RANDOM
AND t1.col <= maxvalue-- RANDOM
我们可以通过在上面的代码中进行以下修改来实现这一点,并去掉CROSS APPLY:
SELECT t1.col,
t2.col AS col_last52wks
FROM TABLE1 t1
INNER JOIN TABLE2 t2
ON t2.sequencecol BETWEEN (t1.sequencecol - 51) AND t1.sequencecol
WHERE t1.col >= minvalue
AND t1.col <= maxvalue
【问题讨论】:
-
Cross Apply将从t2返回前 10 个tradyrwkcode,对于来自t1的每个tradyrwkcode。但是Cross Join将只返回 10 条记录,无论有多少tradyrwkcode存在 -
如果我说 CROSS APPLY 的工作方式类似于 INNER JOIN 会错吗?
-
有点,但它们有自己的用途。外部表引用可以在
CROSS APPLY子选择中引用,但在Inner join中您不能这样做。 -
这是唯一的区别还是还有其他区别?
-
还存在许多其他差异。谷歌它..
标签: sql-server join netezza cross-join cross-apply