我有两个具有相同列的表,但第二个表比第一个表多一列(
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=1
和 KID=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)
你能帮我吗?
你的
WHERE NOT EXISTS...
条件确实没有意义。现在您只需检查是否没有带有 InfoDate = '2015-12-31 00:00:00.000'
的行。由于明显有这样一行,所以没有记录受到影响。
试试这个:
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'
AND [table1].[KID] = [table2].[KID]
AND [table1].[ParentID] = [table2].[ParentID]
AND [table1].[KLevel] = [table2].[KLevel])
使用任意键值获取不存在的记录。
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'
);
您需要将两个查询关联为:
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'
);
如果 KID 在表中是唯一的...
插入表2(KID,ParentID,KLevel) 从 table1 中选择 KID 、 ParentID 、 KLevel 其中 table1.KID 不在 ( 从表 2 中选择不同的 KID,其中 InfoDate = '2015-12-31 00:00:00.000');