我有一个表 T1,我想得到一个包含两倍行的新表:一个额外的列,它得到 0(对于 T1 的一个副本)和 1(对于 T1 的第二个副本)。
换句话说,我想将 T1 与一个带有一个布尔列和所有可能值的常量表交叉连接。
在 MySQL 中执行此操作的最佳/最有效/更合适的方法是什么?
我有一个表 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
这绝对比 UNION 更有效。是否比 UNION ALL 更高效取决于数据库引擎。
如果“t”是一个子查询,那么这可能更有效,因为子查询不可能被多次评估。
你是说工会?
select 0 as newfield, * from yourtable
union all
select 1, * from yourtable