从table1和table2中选择不同的值,然后将其插入table3中

时间:2015-02-27 18:37:33

标签: sql sql-server sql-server-2008 tsql

以下是我正在使用的陈述。

insert into Course_Data (Branch, CC, C_Title, Sem, Credits) 
values 
(select distinct from (select * from Course_Data)
 union
(select * from TEMP1) a order by a.CC)

我遇到了错误:

  

关键字“select”附近的语法不正确。 'a'附近的语法不正确。

课程_数据:

Branch |  CC  |  C_Title   |   Sem   | Credits 
CS       sub1    Networks      3rd     4:1:1=6 

温度:

 Branch |   CC   |   C_Title   |   Sem   | Credits
   MCA     sub1     Compuuters     3rd      4:1:1=6 
   CS      sub1     Networks       3rd      4:1:1=6 

这是2个表,因此在执行查询后,我必须将MCA Branch数据放入Course_Data表中,而不重复CS分支数据。即 Course_Data:

Branch |    CC    |    C_Title    |   Sem   | Credits 
 CS      sub1          Networks       3rd       4:1:1=6 
 MCA     sub1          Compuuters     3rd       4:1:1=6

1 个答案:

答案 0 :(得分:3)

使用SELECT语句的插入不需要关键字VALUES。请参阅synthax MSDN。 所以你的查询将是

INSERT INTO Dist_Data (Branch,CC,C_Title,Sem,Credits) 
select * 
from 
(
    select * from Course_Data 
    union 
    select * from TEMP1
)a 
order by a.CC

*使用SELECT-INSERT时要小心,因为如果源表和目标表中的列数不匹配,则会引发错误。所以最好像下面这样使用

INSERT INTO Dist_Data (Branch,CC,C_Title,Sem,Credits) 
select * 
from 
(
    select COL1,COL2,COL3,COL4,COL5 from Course_Data 
    union 
    select COL1,COL2,COL3,COL4,COL5 from TEMP1
)a 
order by a.COLUMNNAME

编辑:

根据您的新要求,您可以使用EXCEPT子句/运算符来避免将重复数据插入Course_Data表。使用EXCEPT时,列的顺序应相同。有关EXCEPT here的更多信息。

<强> QUERY

INSERT INTO Course_Data (Branch,CC,C_Title,Sem,Credits) 
select * 
from 
(
    SELECT Branch,CC,C_Title,Sem,Credits FROM TEMP1
    EXCEPT
    SELECT Branch,CC,C_Title,Sem,Credits FROM Course_Data
)a 
order by a.COLUMNNAME