2016-02-16 153 views
0

我需要连接来自两个不同表的数据,如下所示。只有一个sql查询可能吗?如果两个表上都有“key”和“name”,那么它们是相同的。 “状态”在table1上总是“ - ”,在table2上总是“T”。两个表上的“name”和“comp”也是匹配的(例如:Name3-C和Name4-B)。
我试图做“联合”和“加入”,但没有解决方案呢!SQL查询,连接两个表

table1的

 
t1.name  t1.time t1.comp t1.key t1.status 
name1  1   B   106  - 
name2  2   B   -   - 
name3  1   C   102  - 
name4  3   B   103  - 
name7  1   C   104  - 

表2

 
t2.name  t2.time t2.comp t2.key t2.status 
name5  6   B   100  T 
name6  5   B   -   T 
name3  7   C   102  T 
name4  9   B   103  T 

结果应该是...

 
name  time1 time2 t.comp t.key t.status 
name1  1  -  B  106  - 
name2  2  -  B  -  - 
name3  1  7  C  102  T 
name4  3  9  B  103  T 
name5  -  6  C  100  T 
name6  -  5  B  -  T 
name7  1  -  C  104  - 


提前感谢!

+1

为什么'NAME5第6 B 100'输出为'NAME5 - 6个C 100'?这是一个错字吗? –

回答

2

如果我理解正确的,你想有一个full outer join

select coalesce(t1.name, t2.name) as name, 
     t1.time as time1, t2.time as time2, 
     coalesce(t1.comp, t2.comp) as comp, 
     coalesce(t1.key, t2.key) as key, 
     t2.status 
from table1 t1 full outer join 
    table2 t2 
    on t1.key = t2.key and t1.name = t2.name; 
+1

如果你使用完全连接...使用(key,name)'''''''''''''''''key''''''''coalesce''' –

+0

谢谢!这工作!如果table2上有可能重复的行,我可以使用...让我们说在查询结束时“按名称分组”?如果我使用MIN(时间),MIN(comp)等... – kivi

+0

@a_horse_with_no_name。 。 。那是真实的。并不是所有的数据库都支持“使用”(并且该问题没有指定数据库)。 –

0
Select * from table1 
union all 
Select * from table2 

假设表格的模式是相同的。如果他们不只是添加从一个表到另一个表的字段。

Select field1,field2,NULL,NULL from table1 
union all 
Select NULL,NULL,field3,field4 from table2 
+0

感谢您的回答。我试过这个,但是这个查询返回''name3'和'name4'的重复行。时代应该是不同的列。 – kivi

+0

我的错误,我没有拿起你有的重复。戈登的回答应该是诀窍。 – ricky89

0
SELECT 
    T1.time AS Time1, 
    T2.Time AS Time2, 
    ISNULL(T1.COMP,T2.Comp) AS Comp, 
    ISNULL(T1.Key,T2.Key) 
FROM TABLE1 T1 
FULL OUTER JOIN TABLE2 T2 
ON T1.key = T2.key 
+0

'ISNULL'是产品特定的,并且没有标记dbms。 ('coalesce'是ANSI SQL的一种方式。) – jarlh