gpt4 book ai didi

mysql - 其他 RDBMS(非 SQL Server)中 OUTER APPLY 的模拟

转载 作者:行者123 更新时间:2023-11-29 00:30:16 26 4
gpt4 key购买 nike

我在工作中使用的是 SQL Server,我对 OUTER APPLY 子句有一些很好的技巧,可以帮助我避免重复代码。例如,如果我有一个这样的表:

create table Transactions
(
ID bigint identity(1, 1) primary key, [Date] datetime, Amount decimal(29, 2), Amount2 decimal(29, 2)
)

insert into Transactions ([Date], Amount, Amount2)
select getdate(), 100.00, null union all
select getdate(), 25.00, 75.00

我想从中选择数据,例如我将为每个非空金额创建行,我可以这样查询:

select
T.ID,
T.[Date],
OA.Amount
from Transactions as T
outer apply (
select T.Amount as Amount union all
select T.Amount2 as Amount
) as OA
where OA.Amount is not null

而不是使用union:

select
T.ID,
T.[Date],
T.Amount
from Transactions as T
where T.Amount is not null

union all

select
T.ID,
T.[Date],
T.Amount2 as Amount
from Transactions as T
where T.Amount2 is not null

所以我想知道 - 其他 RDBMS 是否有这种可能性?

SQL FIDDLE

最佳答案

在 Oracle 中,横向连接是笛卡尔连接,其结果集取决于行的值。尚未引入新关键字 ( SQLFiddle ):

SQL> CREATE OR REPLACE TYPE number_nt AS TABLE OF NUMBER;
2 /

Type created
SQL> SELECT t.id, t.dt, u.column_value amount
2 FROM Transactions t
3 CROSS JOIN TABLE(number_nt(t.amount, t.amount2)) u;

ID DT AMOUNT
---------- ----------- ------------
1 05/06/2013 100
1 05/06/2013
2 05/06/2013 25
2 05/06/2013 75

Oracle 似乎使用了 LATERAL 关键字 internally虽然。

关于mysql - 其他 RDBMS(非 SQL Server)中 OUTER APPLY 的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16935160/

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