こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Accessで差分取得する方法は? LEFT JOIN エラー

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 は各テーブルの主キーですが、新旧テーブル間の関連はありません(リレーションではありません)。

投稿日時 - 2006-03-12 17:02:16

QNo.2024328

暇なときに回答ください

質問者が選んだベストアンサー

また違ってましたね。

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

投稿日時 - 2006-03-12 19:54:44

お礼

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

投稿日時 - 2006-03-12 20:13:10

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

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

投稿日時 - 2006-03-12 19:32:53

ANo.1

LEFT JOIN エラーと言っても、
【ダメだったクエリ】は INNER JOIN になっていますが。

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

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

投稿日時 - 2006-03-12 18:51:54

補足

>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:05

あなたにオススメの質問