
■ SQL結合
一つのテーブルに親子関係を表す区分を持たせて、その中で得意先と仕入先の情報を管理しています。

この時に、ある得意先の親に設定されている得意先枝と仕入先枝が、子に設定されている値と一致しているかを調べたかったのです。
ただし、得意先枝は親の得意先区分が"1"(対象)の時だけで良く、仕入先枝は親の仕入先区分が"1"(対象)の時だけ調べればよいって条件が付きます。
こんな感じでいけるかな?

親子区分が"1"(親)のデータを引っこ抜いて、得意先区分が"1"(可)の時は得意先枝が異なる、仕入先区分が"1"(可)の時は仕入先枝が異なるデータを抽出します。これで、親と子で一致しないデータが抽出される筈です。
このSQL、条件によってテーブル結合の条件を動的に変えているのですが、こういう書き方って使えるんでしたっけ?
■ SQL文
実験してみることにしました。
Oracleの場合、SQLはこんな感じでしょうか。
SELECT
A.取引先, A.親子区分, A.得意先枝, B.得意先枝, A.仕入先枝, B.仕入先枝
FROM
マスタ A, マスタ B
WHERE
A.親子区分 = '1'
AND A.取引先 = B.取引先
AND (
A.得意先区分 = '1'
AND A.得意先枝 <> B.得意先枝
)
OR
(
A.仕入先区分 = '1'
AND A.仕入先枝 <> B.仕入先枝
)
Accessの場合はこうですかね。
SELECT
A.取引先, A.親子区分, A.得意先枝, B.得意先枝, A.仕入先枝, B.仕入先枝
FROM
マスタ AS A INNER JOIN マスタ AS B ON
(
A.得意先区分 = "1"
AND A.取引先 = B.取引先
AND A.得意先枝 <> B.得意先枝
)
OR
(
A.仕入先区分 = "1"
AND A.取引先 = B.取引先
AND A.仕入先枝 <> B.仕入先枝
)
WHERE
A.親子区分="1"
■ 実験
テストデータを用意します。

得意先と仕入先でそれぞれ、親子で枝が違うデータを用意します。
んで、SQLを実行した結果はこちら。

うんうん、エラーにもならないし、抽出結果も想定通りです。どうやら問題ないようですね。
■ 後書き
Oracleに慣れている身としては、AccessでのSQLの書き方に違和感を覚えます。なんか、SQLを見ても上手くイメージ出来ないというか・・・
今回も、AccessでSQLを書くのにかなり苦戦しました。単にこっちの書き方に不慣れなだけって話ではあるんですがね。
投稿記事の一覧:http://harikofu.web.fc2.com/
--- blog end ---
スポンサードリンク


