2011-10-06 46 views

回答

3

你需要做这样的事情

Select a,b,c from x 

union all -- ALL doesn't filter dups and is faster 

Select d, e, '' as f from y 

我''但你可能想要使用NULL或0,NULL将兼容将所有数据类型,''将不会

我也使用UNION ALL而不是UNION,因为它会更好,因为它没有t o不要排序操作摆脱DUP的

这里不需要别名的F要么是因为顶部查询确定结果集列的名称

+1

使用NULL代替空字符串可能会更好,并且您可能还需要将数据类型强制为兼容类型。另一个有用的方法是将一个派生列添加到集合中,以帮助识别数据来自哪里,所以'SELECT a,b,c,'X'AS src ...' – billinkc

+0

那么简单...谢谢@ SQLManace ...还有think billinkc比较好知道... –

+0

我认为你需要一个更强烈的警告,使用'UNION ALL'可能会产生不同的结果。如前所述,它是不明确的,“['UNION ALL']不需要做排序操作来摆脱dups”可能会被错误地解释为,“['UNION ALL']摆脱dups而不必做排序操作“。 – onedaywhen

0
select col1, col2, col3, col4 
from mytable1 
union all 
select col5, col6, null as col7, '' as col8 
from mytable2 
1

注意

select a, b, c from x 
union 
select d, e, '' as f from y; 

select d, e, '' as f from y 
union 
select a, b, c from x; 

将产生不同的结果,即来自第一方的属性名称,出现的表格将被使用。

也许最好是明确地重命名第二个表中的列,例如,

select a, b, c from x 
union 
select d AS a, e AS b, '' as c from y; 
+0

我已经解决了问题,无需重命名...重命名不是必须的,它获得第一个表格列名称thx再次... –

0
first table 
id 
name 
second table 
name 
seatno 
如果你想加入的名字&有两个表中使用ROW_NUMBER在连接查询一些重复的名字

+0

请澄清你的答案来改善它,这不是很清楚你的意思。你能举个例子吗? – Josien