SQL:如果存在则插入忽略

时间:2013-06-28 09:49:02

标签: sql

我想要insert from Table1 the rows are not in Table2.

在Table2上使用parentId = 0节点是错误的。

所以我需要让所有父母的所有儿子都在Table2中,如果他们不在Table2上,那么父母曾经在Table2上拥有Key。

我为每张桌子准备了两把钥匙,而不仅仅是一把钥匙。有我的问题。

如果有人可以帮助我,请告诉我。我可以使用insert

cursors

父亲的关键更重要,如果在我的Table2中我有一个带有密钥的父,我需要找到表格table1的儿子,用父亲的密钥插入它们,如果存在儿子用不同的密钥删除它毕竟从table2中删除了父节点

2 个答案:

答案 0 :(得分:1)

注意:此答案假设您正在使用的SQL提供程序/版本。

DECLARE @temp table (idnode, idkey)

INSERT INTO @temp
SELECT 
   item.idnode, table2.idkey
FROM
    Table1 item
    inner join Table1 parent on item.idparent  = parent.idnode
    inner join Table2 on table2.idnode = parent.idnode;


SELECT * from @temp;

一旦您检查到它是正确的,这应该返回所需的结果:

下一部分假定您要删除现有的不匹配条目...

DELETE from table2;

insert into table2
select * from @temp;

保留现有值:

insert into table2
select t.* from @temp t
left outer join table2 on table2.idnode = t.idnode
where table2.idnode is null

答案 1 :(得分:0)

您可以在SQL Server 2008中使用MERGE查询。您可以在以下链接中找到详细信息:

http://msdn.microsoft.com/en-us/library/bb522522(v=sql.105).aspx