0

最近,我遇到了一个 SQL 查询的问题。问题如下:我有一个名为“旧”和“新”的 2 个表。两者具有相同的结构和列“key1”、“key2”和“description”。此外,“新”表包含“旧”条目和其他条目的子集。

现在我想从“旧”表中删除所有未出现在“新”表中的条目。问题是,“key1”和“key2”是唯一的,只有两者的组合。


示例条目:

老的:

key1, key2, description
1, 2, "Hello"
1, 3, "World"
2, 3, "!"

新的:

key1, key2, description
1, 3, "World"
2, 3, "!"

我尝试了下面的sql语句,但它不起作用(至少在Access97中)

DELETE
FROM old
WHERE old.key1<>new.key1 AND old.key2 <> new.key2

有没有人知道如何从旧的条目中删除所有条目,这些条目在 key1 和 key2 的组合是唯一的约束下没有出现在“新”中?

4

2 回答 2

3
DELETE FROM old 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   new 
                   WHERE  old.key1 = new.key1 
                          AND old.key2 = new.key2) 

您还可以检查描述匹配

DELETE FROM old 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   new 
                   WHERE  old.key1 = new.key1 
                          AND old.key2 = new.key2 
                          AND old.description = new.description) 
于 2012-05-22T11:07:13.950 回答
1
DELETE *
FROM old
WHERE old.key1 & " " & old.key2 IN (select new.key1 & " " & new.key2 from new )
于 2012-05-22T11:13:58.060 回答