INSERT INTO таблица, сравнивающая две другие таблицы с использованием Not EXISTS - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть 3 таблицы:

  • Server_db_relation
  • DatabaseList
  • DatabaseList_Archive

Цель состоит в том, чтобы сравнить таблицу Server_db_relation и DatabaseList на основе значений в столбце ServerName и DatabaseName. Если значения не существуют в таблице Server_db_relation, но существуют в DatabaseList, то он должен вставить всю строку из DatabaseList в DataList_Archive (эти две таблицы идентичны по структуре).

Кроме того, если возможно, строка была вставлена ​​в DatabaseList_Archive, затем удалите запись из DatabaseList.

INSERT INTO DatabaseList_Archieve (Column1, Column2...)
    SELECT * 
    FROM DatabaseList
    WHERE NOT EXISTS (SELECT 1 
                      FROM DabaseList, Server_db_relation 
                      WHERE DatabaseList.ServerName = Server_db_relation.ServerName 
                        AND DatabaseList.DatabaseName = Server_db_relatio.[Database])

Я не получаю никаких синтаксических ошибок, но строки не отображаются пострадавшие. Я добавил 2 строки теста, которые, как я знаю, существуют в DatabaseList, а не в Server_db_relation.

1 Ответ

1 голос
/ 18 апреля 2020

Вам необходимо сопоставить подзапрос:

INSERT INTO DatabaseList_Archieve (Column1, Column2...)
    SELECT dbl.col1, dbl.col2, . .  
    FROM DatabaseList dbl
    WHERE NOT EXISTS(SELECT 1 
                     FROM Server_db_relation sdb 
                     WHERE dbl.ServerName = sdb.ServerName AND 
                           dbl.DatabaseName = sdb.[Database]
                    );

Примечание. Я объявил псевдоним таблицы, чтобы сделать запрос легким для подготовки, и запишите имя столбца или имя таблицы (откуда он пришел).

...