通过更改标志将值从一个表插入另一个表

时间:2009-05-22 15:50:55

标签: sql sql-server database

我必须将值从一个表插入另一个表,其中两个字段的第一个字段名称为ID,第二个字段名称为Flag。

如果在任何目标表行中已存在ID值,则插入时,它将在源表中插入新行作为相同的ID并将Flag作为NEW插入

如果ID值在任何目标表行中不匹配,它将把行作为ID插入,将Flag作为OLD插入。

例如(来自下面的评论):

Table 1
-------- 
A O 
B O 
C O 

Table 2 
A N 
B N 
D N 

After Insert 
------------ 
A N 
B N 
C n 
A N 
B N 
D N

1 个答案:

答案 0 :(得分:2)

如果我正确地关注您,请给出以下

Source Table

ID  |  Flag
-----------
1      NULL  
2      NULL
3      NULL


Dest Table

ID  |  Flag
-----------
1      NULL  

您想要将Source中的记录插入Dest

  • 如果ID中已存在Dest,请将ID插入Sourceflag
  • 如果ID中不存在Dest,请将ID插入Destflag OLD

首先获取IDDest中存在的Source,然后将 记录插入{{1} }

Source

然后获取 INSERT INTO Source (ID, Flag) SELECT s.ID, 'NEW' FROM Source s INNER JOIN Dest d ON d.ID = s.ID 中不存在但存在于ID中的Dest,并将 OLD 记录插入Source

Dest

这导致

    INSERT INTO Dest (ID, Flag)
SELECT 
    s.ID, 'OLD'
FROM
    Source s
LEFT JOIN
    Dest d
    ON d.ID = s.ID
WHERE
    d.ID IS NULL

那是你在找什么?

我必须诚实地说,这并不是一种做事的好方法,例如,我认为更新表中已有的记录而不是插入新的记录会更好相同的Source Table ID | Flag ----------- ---- 1 NULL 2 NULL 3 NULL 1 NEW Dest Table ID | Flag ----------- ---- 1 NULL 2 OLD 3 OLD ,虽然我不知道你想要实现什么,或者你在桌子上有什么键(如果有的话)。如果您能提供更多信息,我可以提供更多帮助。