gpt4 book ai didi

oracle - oracle中的CROSS APPLY和LATERAL有什么区别?

转载 作者:行者123 更新时间:2023-12-05 06:47:33 31 4
gpt4 key购买 nike

我能够理解交叉申请和外部申请之间的区别。但是Cross apply和Lateral有什么区别呢?两者似乎都关联了一个内联 View 并将左表与右表连接起来。

最佳答案

这不是一个笼统的答案。这只是您可以用横向而不是应用做的事情的一个例子:

你有一个表 t(在这个例子中只有 1 行)。对于 t 的每一行,您进行 2 种不同类型的计算(X 和 Y),它们返回几 (3) 行。

您不想对 X 和 Y 进行叉积。您希望第一行 X 紧挨着 Y 的第一行,依此类推。

X Y
1 11
2 22
3 33

如果你使用交叉应用。唯一的方法(不创建子查询)是添加一个条件(在 where block 中)

WITH
t (X, Y)
AS
(SELECT json_array (1, 2, 3), json_array (11, 22, 33) FROM DUAL),
step2
AS
(SELECT t1.idx, t1.x, t2.Y
FROM t
CROSS APPLY
(SELECT *
FROM JSON_TABLE (
t.X,
'$'
COLUMNS (
NESTED PATH '$[*]'
COLUMNS (idx FOR ORDINALITY, x PATH '$'))))
t1
CROSS APPLY
JSON_TABLE (
t.Y,
'$'
COLUMNS (
NESTED PATH '$[*]'
COLUMNS (idx FOR ORDINALITY, y PATH '$'))) t2
WHERE t1.idx = t2.idx) --on t1.idx=t2.idx
SELECT step2.x, step2.Y
FROM step2;

但是对于横向,您可以通过接缝来做到这一点。更易于阅读。

 WITH
t (X, Y)
AS
(SELECT json_array (1, 2, 3), json_array (11, 22, 33) FROM DUAL),
step2
AS
(SELECT t1.idx, t1.x, t2.Y
FROM t
CROSS APPLY
(SELECT *
FROM JSON_TABLE (
t.X,
'$'
COLUMNS (
NESTED PATH '$[*]'
COLUMNS (idx FOR ORDINALITY, x PATH '$'))))
t1
INNER JOIN
LATERAL (
SELECT *
FROM JSON_TABLE (
t.Y,
'$'
COLUMNS (
NESTED PATH '$[*]'
COLUMNS (idx FOR ORDINALITY,
y PATH '$')))--where t1.idx=t2.idx
) t2
ON t1.idx = t2.idx)
SELECT *
FROM step2;

code

where the example comes from

关于oracle - oracle中的CROSS APPLY和LATERAL有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67076749/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com