我必须将值从一个表插入另一个表,其中两个字段的第一个字段名称为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
答案 0 :(得分:2)
如果我正确地关注您,请给出以下
Source Table
ID | Flag
-----------
1 NULL
2 NULL
3 NULL
Dest Table
ID | Flag
-----------
1 NULL
您想要将Source
中的记录插入Dest
。
ID
中已存在Dest
,请将ID
插入Source
,flag
新 强> ID
中不存在Dest
,请将ID
插入Dest
,flag
OLD 强> 首先获取ID
和Dest
中存在的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
,虽然我不知道你想要实现什么,或者你在桌子上有什么键(如果有的话)。如果您能提供更多信息,我可以提供更多帮助。