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

时间:2012-08-22 13:49:48

标签: mysql sql cross-join

我有一个表T1,我想得到一个有两次行的新表:一个额外的列得到0(对于T1的一个副本)和1(对于T1的第二个副本)。

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

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

2 个答案:

答案 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