我有一个表T1,我想得到一个有两次行的新表:一个额外的列得到0(对于T1的一个副本)和1(对于T1的第二个副本)。
换句话说,我想用一个带有一个布尔列和所有可能值的常量表交叉连接T1。
在MySQL中执行此操作的最佳/最有效/更合适的方法是什么?
答案 0 :(得分:4)
如果您想通过交叉联接执行此操作,可以执行以下操作:
select t.*, const.which
from t cross join
(select 0 as which union all select 1 as which) const
这肯定比UNION更有效。它是否比UNION ALL更有效取决于数据库引擎。
如果“t”是子查询,那么这可能会更有效率,因为子查询不可能被多次评估。
答案 1 :(得分:2)
你的意思是工会?
select 0 as newfield, * from yourtable
union all
select 1, * from yourtable