什么是 CROSS JOIN(SELECT 0 作为 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION...)

What is CROSS JOIN (SELECT 0 as a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION...)

我在回顾旧代码进行清理时遇到了一些奇怪的遗留代码,我试图确定它的作用...

CROSS JOIN (SELECT 0 as a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) as b

这是一种我以前从未见过的技术,包括在交叉连接中对数字进行多个联合选择,老实说,我真的很困惑它在做什么以及为什么有人会这样做。

Cross join 创建笛卡尔积。

假设 from 子句如下所示:

FROM t CROSS JOIN
     ( . . . )

这会为 t 中的每一行创建四行。这些行中 b.a 的值从 0 到 3 不等。