Если я правильно следую за вами, учитывая следующее
Source Table
ID | Flag
-----------
1 NULL
2 NULL
3 NULL
Dest Table
ID | Flag
-----------
1 NULL
Вы хотите вставить записи из Source
в Dest
.
- Если
ID
уже существует в Dest
, вставьте ID
в Source
с flag
из NEW
- Если
ID
не существует в Dest
, вставьте ID
в Dest
с flag
из OLD
Сначала получите ID
s, которые существуют в Dest
и Source
, и вставьте NEW записей в Source
INSERT INTO Source (ID, Flag)
SELECT
s.ID, 'NEW'
FROM
Source s
INNER JOIN
Dest d
ON d.ID = s.ID
затем получите ID
s, которые не существуют в Dest
, но существуют в Source
, и вставьте OLD записей в 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
Это то, что вы искали?
Я должен быть честным и сказать, что это не очень хороший способ делать что-то, например, я думаю, что было бы лучше обновить записи, которые у вас уже есть в таблицах, чем вставлять новые с то же самое ID
, хотя я не знаю, чего вы пытаетесь достичь или какие у вас ключи на столах (если есть). Если бы вы могли предоставить больше информации, я мог бы помочь вам в дальнейшем.