Вы можете использовать
DELETE car_catalog_backup b
WHERE not exists
( SELECT 0
FROM car_catalog c
WHERE b.id_car_bk = c.id_car );
или
DELETE car_catalog_backup b
WHERE b.id_car_bk not in
( SELECT c.id_car
FROM car_catalog c );
при условии, что car_catalog
равно the source
, а car_catalog_backup
равно the target
. Первый вариант предпочтительнее, так как он более производительный.
Если вы хотите выяснить свою цель с помощью оператора MERGE
, аналогичного вашему случаю, используйте следующее
MERGE INTO car_catalog_backup a
USING (SELECT id_car, car_brand, car_type, car_brand_bk
FROM car_catalog
JOIN car_catalog_backup
ON id_car_bk = id_car
) b
ON (a.id_car_bk = b.id_car)
WHEN MATCHED THEN
UPDATE SET a.new_car = 1
DELETE
WHERE a.car_brand_bk != b.car_brand
WHEN NOT MATCHED THEN
INSERT
(id_car_bk, car_brand_bk, car_type_bk)
VALUES
(b.id_car, b.car_brand, b.car_type)
для удаления записей, соответствующих для id
столбцов (a.id_car_bk = b.id_car
), но не соответствующих для brand code
столбцов (a.car_brand_bk != car_brand
) в качестве примера.
Демо