ein*_*ica 2 mysql sql cross-join
我有一个表 T1,我想要一个具有两倍行数的新表:一个额外的列,该列获取 0(对于 T1 的一个副本)和 1(对于 T1 的第二个副本)。
换句话说,我想将 T1 与具有一个布尔列和所有可能值的常量表交叉连接。
在 MySQL 中执行此操作的最佳/最有效/更合适的方法是什么?
如果你想通过交叉连接来做到这一点,你可以这样做:
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”是子查询,那么这可能会更有效,因为子查询不可能被多次求值。