cross apply (
values
(col1_id, col1_amt),
(col2_id, col2_amt),
(col3_id, col3_amt),
(col4_id, col4_amt),
(col5_id, col5_amt),
(col6_id, col6_amt)
) e (col_id, col_amt)
我想在MySQL中使用类似的SQL Server语法,但似乎找不到?
您可以在MySQL 8.0.14+中使用CROSS JOIN LATERAL
。8.0.19+也支持VALUES
(但您需要ROW
构造函数(
select *
from (values
row('a')
) v1(x)
cross join lateral (values
row (concat(v1.x, 'b'))
) v2(y)
db<gt;小提琴
因此,对于您的示例,您可以执行此
cross join lateral
(
values
row(fund1_id, fund1_amt),
row(fund2_id, fund2_amt),
row(fund3_id, fund3_amt),
row(fund4_id, fund4_amt),
row(fund5_id, fund5_amt),
row(fund6_id, fund6_amt)
)
对于OUTER APPLY
,可以使用LEFT JOIN LATERAL .... ON 1=1
您需要在每行之前添加ROW
:
cross apply (
values
ROW(col1_id, col1_amt),
ROW(col2_id, col2_amt),
ROW(col3_id, col3_amt),
ROW(col4_id, col4_amt),
ROW(col5_id, col5_amt),
ROW(col6_id, col6_amt)
) e (col_id, col_amt)
EDIT:展示VALUES
和ROW
应该如何工作的一个简单例子是这个DBFIDDLE