Вставьте значение из одной таблицы в другую, изменив флаг - PullRequest
0 голосов
/ 22 мая 2009

Мне нужно вставить значение из одной таблицы в другую, в которой оба поля имеют два поля, имя первого поля - ID, а имя второго поля - Флаг.

При вставке, если значение идентификатора уже существует в любой из строк таблицы назначения, будет вставлена ​​новая строка в исходной таблице с тем же идентификатором и флагом, что и NEW

если значение идентификатора не совпадает ни в одной из строк таблицы назначения, будет вставлена ​​строка в качестве идентификатора и помечено как 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 Ответ

2 голосов
/ 22 мая 2009

Если я правильно следую за вами, учитывая следующее

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, хотя я не знаю, чего вы пытаетесь достичь или какие у вас ключи на столах (если есть). Если бы вы могли предоставить больше информации, я мог бы помочь вам в дальнейшем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...