プロが教えるわが家の防犯対策術!

Accessで差分抽出するSQLを教えてください。

【旧テーブル】t1
id, class, number, value
1, "a", 1, "aka"
2, "a", 2, "aki"
3, "a", 3, "aku"

【新テーブル】t2
id, class, number, value
1, "a", 1, "aka"
2, "a", 2, "更新"
3, "a", 3, "aku"
4, "a", 4, "新規"
5, "b", 1, "新規"

【ダメだったクエリ】
SELECT t2.*
FROM t2 INNER JOIN t1
WHERE t1.class IS NULL OR t1.number IS NULL

【望む結果】
4, "a", 4, "新規"
5, "b", 1, "新規"

*列 id は各テーブルの主キーですが、新旧テーブル間の関連はありません(リレーションではありません)。

A 回答 (3件)

また違ってましたね。



SELECT T2.*
FROM T2 LEFT JOIN T1 ON T2.number = T1.number AND T2.class = T1.class
WHERE T1.class Is Null OR T1.number Is Null
    • good
    • 0
この回答へのお礼

大正解です!ありがとうございます。

お礼日時:2006/03/12 20:13

あ、もしかしたらこういうことだったのかな?



SELECT T2.*
FROM T2
WHERE T2.class Not In (Select Distinct Class From T1) OR T2.number Not In (Select Distinct Number From T1)
    • good
    • 0

LEFT JOIN エラーと言っても、


【ダメだったクエリ】は INNER JOIN になっていますが。

SELECT T2.*
FROM T2 LEFT JOIN T1 ON T2.id = T1.id
WHERE T1.id Is Null

これで、望む結果が得られます。

この回答への補足

>LEFT JOIN エラーと言っても、
>【ダメだったクエリ】は INNER JOIN
本当ですね(^^; 失礼しました。

id は一意にするためのキーで、新旧の関連性はないのです。

class と number が一致すれば、同一レコード(新レコードと旧レコード)となります。

idは言わば、各テーブル内の行番号です。
SQLでは無視していただいて良いです。

【新テーブル】t2
id, class, number, value
11, "a", 1, "aka"
52, "a", 2, "更新"
63, "a", 3, "aku"
84, "a", 4, "新規"
105, "b", 1, "新規"

補足日時:2006/03/12 19:23
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています