使用 (0,1)^T 交叉连接表的首选方法?

ein*_*ica 2 mysql sql cross-join

我有一个表 T1,我想要一个具有两倍行数的新表:一个额外的列,该列获取 0(对于 T1 的一个副本)和 1(对于 T1 的第二个副本)。

换句话说,我想将 T1 与具有一个布尔列和所有可能值的常量表交叉连接。

在 MySQL 中执行此操作的最佳/最有效/更合适的方法是什么?

Gor*_*off 6

如果你想通过交叉连接来做到这一点,你可以这样做:

select t.*, const.which
from t cross join
     (select 0 as which union all select 1 as which) const
Run Code Online (Sandbox Code Playgroud)

这肯定比UNION效率更高。是否比UNION ALL更高效取决于数据库引擎。

如果“t”是子查询,那么这可能会更有效,因为子查询不可能被多次求值。