加入两个具有不同列数的表

时间:2014-05-15 13:23:54

标签: sql join

我正在尝试用两个不同的表创建一个表

Table 1 has 

ID   Place      Value   Date  
--------------------------------
1    Place     Value1   Date1
2    Place1    Value2   Date2
4    Place2    Value1   Date1
7    Place3    Value2   Date1

and Table2 has 

ID    Name        Values
------------------------
3    ColName1    Value2
5    ColName2    Value1
6    ColName3    Value2

现在我要创建一个包含ID,Table1.Place,Table1.Date和Table2.Value的新表

我尝试使用

INSERT INTO [dbo].[tblNewTable] 
SELECT tbl1.ID, tbl1.Place, tbl1.Date
FROM [Tabble1] tbl1 
UNION
SELECT tbl2.Value 
FROM [Table2] tbl2

但它表示使用UNION,INTERSECT或EXCEPT运算符组合的所有查询必须在其目标列表中具有相同数量的表达式。

请注意,ID在两个表中都是唯一的。

2 个答案:

答案 0 :(得分:2)

不完全确定你要求的是什么。如果要使用UNION语句,则每个查询中必须包含相同数量的列(具有相同的数据类型)。所以在你的情况下,如果你想要的结果是获得1到7的id列表,那么你需要这样的东西:

INSERT INTO [dbo].[tblNewTable] 
SELECT tbl1.ID, tbl1.Place, tbl1.Date, tbl1.Value
FROM [Tabble1] tbl1 
UNION
SELECT tbl2.ID, NULL, NULL, tbl2.Value 
FROM [Table2] tbl2

这将导致:

ID   Place     Value    Date  
--------------------------------
1    Place     Value1   Date1
2    Place1    Value2   Date2
3    NULL      Value2   NULL
4    Place2    Value1   Date1
5    NULL      Value1   NULL
6    NULL      Value2   NULL
7    Place3    Value2   Date1

或者,您希望JOIN表获得一个共同的结果集:

INSERT INTO [dbo].[tblNewTable] 
SELECT tbl1.ID, tbl1.Place, tbl1.Date, tbl2.Value
FROM [Tabble1] tbl1  
    JOIN [Table2] tbl2 ON tbl1.ID = tbl2.ID

在您提供的数据中,这将导致无记录。

答案 1 :(得分:1)

Union应位于两个具有相同数量和类型的列的表上。 查询应如下所示。你需要的是一个如下连接:

INSERT INTO [dbo].[tblNewTable] 
SELECT tbl1.ID, tbl1.Place, tbl1.Date, tbl2.Value 
FROM [Tabble1] tbl1,  [Table2] tbl2
WHERE tbl1.value = tbl2.value