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 に答える