This is how the MERGE script was invented for processing, especially in the WHEN NOT MATCHED BY SOURCE .
In general terms, put the current state values ββin a staging table, then use MERGE to process the INSERT and DELETE actions in one hit.
Here is a brief sketch:
CREATE TABLE Cars (VIN INTEGER NOT NULL UNIQUE); CREATE TABLE Drivers (driver_licence_number INTEGER NOT NULL UNIQUE); CREATE TABLE CarDrivers ( VIN INTEGER NOT NULL REFERENCES Cars (VIN), driver_licence_number INTEGER NOT NULL REFERENCES Drivers (driver_licence_number) ); INSERT INTO Cars VALUES (1), (2), (3); INSERT INTO Drivers VALUES (22), (55), (99); INSERT INTO CarDrivers VALUES (1, 22), (1, 55); CREATE TABLE CarDrivers_staging ( VIN INTEGER NOT NULL REFERENCES Cars (VIN), driver_licence_number INTEGER NOT NULL REFERENCES Drivers (driver_licence_number) ); INSERT INTO CarDrivers_staging VALUES (1, 55),
source share