我不想争论什么是性能更好,我在Sybase IQ中工作并且必须将历史表组合成一个选择,我尝试使用union,这是不可能的,我用完了工作温度空间,每个时间。我最后的希望是尝试用连接来做到这一点,但我不知道如何从左表和右表中获取所有数据,只将左边缺少的数据放入单个列中。通过联合,它看起来像这样:
select col,col_1,col_2 from(
select col,col_1,col_2 from table1
union
select col,col_1,col_2 from table2
union
select col,col_1,col_2 from table3)x
并且通过连接,我需要使用类似的东西:
select col,col_1,col_2 from(
select a.col,b.col,c.col,
a.col_1,b.col_1,c.col_1,
a.col_2,b.col_2,c.col_2
from table1 a
left join table2 b on a.col = b.col
left join table3 c on a.col = c.col
group by a.col,b.col,c.col,
a.col_1,b.col_1,c.col_1,
a.col_2,b.col_2,c.col_2)x
仍然使用这个sq我不能在我的选择中得到3列(这样我会得到一个错误,因为每列有3组),这就是我想要实现的目标。
答案 0 :(得分:1)
这可能没有帮助,取决于您在临时空间限制范围内的距离,但是您是否尝试将2个表组合到临时表中以减少在选择中使用最终联盟进行重复数据删除的飞行成本出?
像...一样的东西。
Create table #temp (col, col_1, col_2)
Insert into #temp
Select col, col_1, col_2 from table1
Union
Select col, col_1, col_2 from table2
Go
Select col, col_1, col_2, from #temp
Union
Select col, col_1, col_2 from table3
答案 1 :(得分:0)
select col,col_1,col_2 from(
select coalesce (a.col,b.col,c.col) as col,
coalesce (a.col_1,b.col_1,c.col_1) as col_1,
coalesce (a.col_2,b.col_2,c.col_2) as col_2
from table1 a
left join table2 b on a.col = b.col
left join table3 c on a.col = c.col
group by coalesce(a.col,b.col,c.col),
coalesce(a.col_1,b.col_1,c.col_1),
coalesce(a.col_2,b.col_2,c.col_2))x
并告诉我这是否有助于你