I have 3 tables:
- Server_db_relation
- DatabaseList
- DatabaseList_Archive
The goal is to compare table Server_db_relation and DatabaseList based on the values in column ServerName and DatabaseName. If the values do not exists in the table Server_db_relation, but do exist in DatabaseList, then it should insert the entire row from DatabaseList into DataList_Archive (those two tables are identical in structure).
In addition, if possible ones the row has been inserted to DatabaseList_Archive then delete the record from 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])
I do not get any syntax errors but no rows are affected. I have added 2 test rows that I know exist in DatabaseList and not in Server_db_relation.
Advertisement
Answer
You need correlate the sub-query :
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]
);
Note : I have declared the table alias to make the query easy to ready & write column name or table name (where it comes from).