SQL:当第二个表中不存在记录时,从第一个表插入第二个表

时间:2015-12-22 10:40:17

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

我有两个具有相同列的表,但第二个表的列多于第一个表(InfoDate)。

表1

KID       ParentID         KLevel
----------------------------------------
1            0                 1
2            1                 2
3            1                 2

表2

KID ParentID    KLevel      InfoDate
------------------------------------------------------------    
2   1            2          2015-12-31 00:00:00.000

我希望将第一个表中的所有记录插入到条件为InfoDate=2015-12-31 00:00:00.000的第二个表中不存在的第二个表中

例如,在此示例示例中,必须将包含KID=1KID=3的记录插入到表2中。

我做:

insert into table2 (KID , ParentID , KLevel)
select KID , ParentID , KLevel from table1
where not EXISTS(
    SELECT KID , ParentID , KLevel FROM table2 WHERE InfoDate = '2015-12-31 00:00:00.000'
);

但是(0 row(s) affected)

你能帮助我吗?

4 个答案:

答案 0 :(得分:2)

您的=bg($start, $end) background: $start background: -moz-linear-gradient(top, $start, $end) background: -webkit-gradient(linear,0 0, 0 100%, from($start), to($end)) =shadow($distance, $opacity) box-shadow: inset 0 0 $distance rgba(0,0,0,$opacity) -moz-box-shadow: inset 0 0 $distance rgba(0,0,0,$opacity) -webkit-box-shadow: inset 0 0 $distance rgba(0,0,0,$opacity) #table_1 tr:nth-child(odd) tr:nth-child(even) +bg(#ccc,#eee) +shadow(10px,.4) tr:nth-child(even) tr:nth-child(odd) +bg(#ccc,#eee) +shadow(10px,.4) 条件确实没有意义。现在,如果没有WHERE NOT EXISTS...行,您只需检查。由于显然有这样的行,所以没有记录受到影响。

试试这个:

InfoDate = '2015-12-31 00:00:00.000'

答案 1 :(得分:1)

使用任何键值获取不存在的记录。

insert into table2 (KID , ParentID , KLevel)
select KID , ParentID , KLevel from table1
where KID NOT IN (
    SELECT KID FROM table2 WHERE InfoDate = '2015-12-31 00:00:00.000'
);

答案 2 :(得分:0)

您需要将两个查询关联为:

insert into table2 (KID , ParentID , KLevel)
select t1.KID , t1.ParentID , t1.KLevel 
from table1 t1
where not EXISTS(
SELECT * 
FROM table2 t2
WHERE t2.KID = t1.KID AND t2.ParentID = t1.ParentID AND t2.KLevel = t1.KLevel
AND t2.InfoDate = '2015-12-31 00:00:00.000'
);

答案 3 :(得分:0)

如果KID在表格中是唯一的......

插入table2(KID,ParentID,KLevel) 从table1中选择KID,ParentID,KLevel 其中table1.KID不在(     选择不同的KID FROM table2 WHERE InfoDate =' 2015-12-31 00:00:00.000');