投稿日時:

今回はベン図とSQLを応用して、下記の課題を解いてみましょう。
Accessを用いたサンプルはコチラをご参照ください。

【課題】
テーブル「TableA」のフィールド「Code」には「A,B,C,D,E,F」のデータがある。
テーブル「TableB」のフィールド「Code」には「A,B,C,H,I,J」のデータがある。
ベン図の考え方を用いてTableBのCodeをTableAのCodeと同じレコードにしなさい。

【回答例】
1.TableBにある「H,I,J」を削除します。
 TableAとTableBの論理積「A,B,C」は下記のSQLで取得できます。

(サンプルのクエリ1)

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

 次に、「NOT IN」を使用し、TableBから「A,B,C」以外のレコード(「H,I,J」)を削除指定します。

(サンプルのクエリ2)

DELETE FROM TableB WHERE TableB.Code NOT IN (SELECT TableA.Code FROM TableA INNER JOIN TableB ON TableA.Code = TableB.Code);

2.TableAの「D,E,F」をTableBに追加します。
 先程の論理積「A,B,C」とNOT INを使用すれば、TableAから「A,B,C」以外のレコード(「D,E,F」)を指定できます。

(サンプルのクエリ3)

INSERT INTO TableB (Code) SELECT Code FROM TableA WHERE Code NOT IN (SELECT TableA.Code FROM TableA INNER JOIN TableB ON TableA.Code = TableB.Code);

ベン図の考え方を用いなければ、TableBの全レコードを削除してTableAの全レコードをコピーする容易な方法が取れるのですが、設計に依り容易な方法を使えない場合もありますし、クエリ2までを実施したいという要望が発生することもあります。
この様な時に、ベン図の考え方を取り入れたテクニックを応用してみてはいかがでしょうか。

(担当:奥田 英太郎