首页 > 解决方案 > 什么是交叉连接(选择 0 作为 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

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

标签: sqlunion-all

解决方案


Cross join创建笛卡尔积。

假设from子句如下所示:

FROM t CROSS JOIN
     ( . . . )

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


推荐阅读