0

したいinsert from Table1 the rows are not in Table2.

parentId = 0Table2にノードを配置するのは間違いです。

したがって、すべての親からすべての息子を取得する必要があり、insertそれらが Table2 にない場合は、親が Table2 に持っていたキーを使用します。

各テーブルには、1 つだけでなく 2 つのキーがあります。私の問題があります。

誰かが私に手を差し伸べることができればお願いします。使えcursorsました。

Table1
IDNode, IDParent
1       0
2       1
3       1
4       1
5       0
6       5


Table2
IDNode, IDKey
1       1
1       7
2       6
4       2
5       3





IdNode  IDparent IDkey
2       1           1
3       1           1
4       1           1
2       1           7
3       1           7
4       1           7
remove the IDNode2 with IDKey6
remove the IDNode4 with IDKey2
6       5           4

父の鍵はより重要です。テーブル 2 に鍵を持つ親がいる場合、テーブル 1 から息子を見つけ、父の鍵を挿入し、別の鍵を持つ息子が存在する場合はそれを削除する必要があります。 table2 から親ノードを削除します

4

2 に答える 2

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
于 2013-06-28T10:07:25.907 に答える
0

SQL Server 2008 で MERGE クエリを使用できます。詳細については、以下のリンクを参照してください。

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

于 2013-06-28T10:55:09.200 に答える