MySQL 相当于 SQL Server 的交叉应用值关键字


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:展示VALUESROW应该如何工作的一个简单例子是这个DBFIDDLE

相关内容

最新更新