如何基于其他两个表中没有重叠的值将行插入表中?

时间:2019-03-21 18:45:10

标签: sql sql-server

在为此苦苦挣扎并研究了半天的工作后,我终于放弃并寻求帮助。我有三张桌子。我需要将表2中的所有信息插入表1中,以获取表3的EACH值。

也许我只是没有将我的脑袋缠在完成该操作所需的工作上-但是表2和表3没有重叠的列,那么如何链接它们以将它们插入表1中?

我尝试了几种不同的版本,我的最新版本是这个版本:

insert into Table1 (column1, column2, column4, column3)
    select column1, column2, column3
    from Table2
    union
    select column3
    from Table3

我收到此错误:

  

第205条消息的状态16,状态1,第2行
  使用UNION,INTERSECT或EXCEPT运算符组合的所有查询的目标列表中必须具有相同数量的表达式。

我还需要填写一列,但由于它是一个总括值,因此可以在事后使用update语句来完成。

更新

有人问我要寻找什么样的结果...

第一个数字是表的来源,第二个是列,第三个是值。

表1

2.1.1 | 2.2.1 | 3.3.1 | 2.4.1  
2.1.2 | 2.2.2 | 3.3.1 | 2.4.2  
2.1.3 | 2.2.3 | 3.3.1 | 2.4.3  
2.1.1 | 2.2.1 | 3.3.2 | 2.4.1  
2.1.2 | 2.2.2 | 3.3.2 | 2.4.2  
2.1.3 | 2.2.3 | 3.3.2 | 2.4.3

2 个答案:

答案 0 :(得分:3)

在列不存在时,使null

select column1, column2, column3
from Table2
union all
select column3, null, null
from Table3

答案 1 :(得分:2)

  

我需要在表1中插入表2中的所有信息,以获取表3的EACH值。

我认为您想要cross join

insert into Table1 (column1, column2, column4, column3)
    select t2.column1, t2.column2, t2.column3, t1.column3
    from Table2 t2 cross join
         Table3 t3;