2011-05-11 111 views
0

我要在我的数据库表:高级SQL查询

table1 
column1|column2|column5|column13 
harry marry stan kyle 

table2 
column1|column2|column12|column7 
kenny eric randy ike 

正如你可以看到有在使用相同的名称和两个不同的名称为每个表的两列,我想加入这些成一片,这里是我想达到

column1|column2|column5|column13|column12|column7 
harry marry stan kyle  null  null 
kenny eric null null  randy ike 

column1|column2|column5|column12|column13|column7 
harry marry stan null  kyle  null 
kenny eric null randy null  ike 

输出这可能吗?如何?我已经试过类似:

(select t1.column1 from table1 t1 union select t2.column1 from table t2) 

但我坚持..

回答

6

你应该能够做到

SELECT t1.column1, 
     t1.column2, 
     t1.column5, 
     null column12, 
     t1.column13, 
     null column7 
    FROM table1 t1 
UNION ALL 
SELECT t2.column1, 
     t2.column2, 
     null column5, 
     t2.column12, 
     null column13, 
     t2.column7 
    FROM table2 t2 

如果数据类型(特别是长度)是非常重要的,你可能想要CAST(null as VARCHAR2(100))而不是在第一个查询中选择一个NULL。

2

看看上一个问题。这听起来像你想做一个完整的外部连接,尽管MySQL不直接支持这一点。有一种方法可以做到这一点。

Full Outer Join in MySQL

+0

+1。我不知道MySQL中不存在FULL OUTER JOIN。 – 2011-05-11 14:53:55

2
select 
column1 as column1, 
column2 as column2, 
column5 as column5, 
column13 as column13, 
null as column12, 
null as column7 
from T1 
union 
select 
column1 as column1, 
column2 as column2, 
null as column5, 
null as column13, 
column12 as column12, 
column7 as column7 
from t2 
0

它看起来像一个简单的工会。但我不明白你想要做什么。

但是,如果你蚂蚁的结果,你可以尝试以下。我不知道在想什么表之间的连接是所以我做了一个假设

Select table1.column1,table1.column2,column5,column13,column12,column7 
from 
(Select column1,column2,column5,column13,column12,column7 
from table1 
left join table2 on table1.column1 = table2.column1 

) 
union 
(
Select table1.column1,table1.column2,column5,column13,column12,column7 
from table2 
left join table1 on table1.column1 = table2.column1 
) 
0

你必须列出你需要输出结果的所有列。

select t1.c1, t1.c2, t1.c3, t1.c4, '' ,'' from t1 
union 
select t2.c1, t2.c2, '','' , t2.c7, t2.c8 from t2 

是工作吗?