我正在尝试用两个不同的表创建一个表
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在两个表中都是唯一的。
答案 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