插入联合

时间:2013-03-01 14:38:48

标签: sql sql-server-2008

我有问题。有三个表:T1,T2,T_target。 T1和T2表有许多不同的列,但我只需要两列的ID列。 T_target表当然有一个ID列,另一个是:project_No。

有一些ID也出现在T1和T2中,但我不想在它们之间创建重复项,如果两个表中都出现ID,则只需将其插入T_target一次,但如果已经在T_target允许它行动两次。另一个标准是每个新插入的ID必须在'project_No'列中为值21。所以,例如:

T1:

ID
2548
2566
2569
2843
2888
...

T2:

ID
2557
2566
2569
2700
2913
2994
3018
5426
...

T_target:

ID     project_No
2976   1
3331   7
4049   7
5426   8
5915   3
6253   10
...

我希望看到结果:

T_target:

ID     project_No
2548   21
2557   21
2566   21
2569   21
2700   21
2843   21
2888   21
2913   21
2976   1
2994   21
2018   21
3331   7
4049   7
5426   8
5426   21
5915   3
6253   10
...

所以,我尝试使用此代码(因为两个T_target列都是主键,所以在此处“非空”标准非常重要):

insert into T_target (ID, project_No)
  select (select ID
  from T1 where ID is not NULL
 union
  select ID
  from T2 where ID is not NULL), 21

select * from T_target

错误讯息: “Msg 512,Level 16,State 1,Line 2 子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。 声明已经终止。“

然后我尝试使用VALUES语句而不是第一个SELECT和括号,但错误是相同的。

有一个类似的问题: mySQL query: How to insert with UNION? 但是这个解决方案对我不起作用,因为它表示VALUE和SELECT之间的语法错误。

拜托,帮我一把。 谢谢!

2 个答案:

答案 0 :(得分:25)

这应该做你需要的事情

INSERT INTO T_target
            (ID,
             project_No)
SELECT ID,
       21
FROM   T1
WHERE  ID IS NOT NULL
UNION
SELECT ID,
       21
FROM   T2
WHERE  ID IS NOT NULL 

答案 1 :(得分:1)

我认为您必须稍微修改一下,以避免在select语句中重复ID。

INSERT INTO T_target
            (ID,
             project_No)

SELECT ID, 21 
FROM (
SELECT ID
FROM   T1
WHERE  ID IS NOT NULL
UNION
SELECT ID
FROM   T2
WHERE  ID IS NOT NULL 
) A