【发布时间】:2016-09-15 00:42:00
【问题描述】:
我不想争论什么是性能方面更好,我在 Sybase IQ 中工作并且必须将历史表合并到一个选择中,我尝试使用联合,这是不可能的,我用完了工作临时空间,每个时间。我最后的希望是尝试使用连接来做到这一点,但我只是不知道如何从左表中获取所有数据,而从右表中仅将左侧缺少的数据放入单个列中。使用联合,它看起来像这样:
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
仍然使用这个 sql,我无法在我的选择中得到最后 3 列(这样我会得到一个错误,因为每列有 3 个集合),这就是我试图实现的目标。
【问题讨论】:
-
你确定你想要
UNION而不是UNION ALL吗?前者有很多工作与搜索重复项有关,而后者只是将结果粘合在一起。连接不适用于给定的问题。 -
我有重复,所以最终我需要有一个 group by 或 distinct,但我会尝试 union all
-
那你倒霉了。
UNION和UNION ALL+DISTINCT之间应该没有区别。如果我没记错的话,你唯一的机会是摆脱重复表中是否有重复项?然后在联合之前使用SELECT DISTINCT。您可以预见表格之间是否存在重叠,例如一月/二月的一张桌子,二月/三月的另一张桌子?然后在联合之前使用WHERE自己消除重复数据。