所以,我有两个表,目标表和源表。我需要删除目标表中存在的行,但源表中不存在的行。
和代码:
Set up docker on your instance
docker daemon --storage-opt dm.basesize=60G
答案 0 :(得分:0)
Delete from target
Where not exists
(
Select 1
From source
Where join of source and target
)
答案 1 :(得分:0)
通过左联接:
DELETE target
FROM target LEFT JOIN source
ON target.someid = source.otherid
WHERE source.otherid IS NULL;
答案 2 :(得分:0)
您可以使用
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
)不匹配的记录。