投稿日時:

ベン図はご存じですか?
もし解らなければ、テーブルとリレーションシップの理解に役立ちますので、少し勉強してみてください。
今回のお話は、論理和 (OR)、論理積 (AND)、排他的論理和 (XOR)だけを理解していれば大丈夫です。

同じ構造のテーブル「TableA」と「TableB」があります。
TableAのフィールド「Code」には「A、B、C、D、E、F」があり、
TableBのフィールド「Code」には「A、B、C、G、H、I」があるとします。

このとき、TableAとTableBの論理和は「A、B、C、D、E、F、G、H、I」です。
SQLではUNIONを使用すれば簡単に求められます。

SELECT Code FROM TableA UNION SELECT Code FROM TableB

また、TableAとTableBの論理積は「A、B、C」です。
SQLではINNER JOINを使用すれば簡単に求められます。

SELECT TableA.Code FROM TableA INNER JOIN TableB ON TableA.Code = TableB.Code

さらに、TableAとTableBの排他的論理和は「D、E、F、G、H、I」です。
SQLではFULL OUTER JOINを使用すれば簡単に求められるのですが、Access(Jet Database)やMySQLではFULL OUTER JOINは使用できないので、ちょっと複雑になりますが下記のように記述します。

SELECT TableA.Code FROM TableA LEFT JOIN TableB ON TableA.Code = TableB.Code WHERE TableB.Code IS NULL
UNION
SELECT TableB.Code FROM TableA RIGHT JOIN TableB ON TableA.Code = TableB.Code WHERE TableA.Code IS NULL

という事でサンプルを用意したのでどうぞ。

同じ構造のテーブルが2個以上あるという段階でテーブル設計がおかしいのですが、既存のレコードとインポートしたレコードを比較する際に使用すると便利ですので、覚えておくと良いと思います。

(担当:奥田 英太郎