Page 660 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼非等価結合について Wow 04/6/9(水) 9:49 ┗Re:非等価結合について しろくろやぎ 04/6/9(水) 12:11 ┗Re:非等価結合について Wow 04/6/9(水) 12:52 ┗Re:非等価結合について しろくろやぎ 04/6/9(水) 13:48 ┣Re:非等価結合について Wow 04/6/9(水) 14:01 ┗Re:非等価結合について Wow 04/6/9(水) 15:47 ─────────────────────────────────────── ■題名 : 非等価結合について ■名前 : Wow ■日付 : 04/6/9(水) 9:49 -------------------------------------------------------------------------
はじめまして。 Accessクエリで、困っている部分があるので教えて下さい。 テーブル1 ---------------- カラムA カラムB ---------------- 1 ABCD 2 EFGH 3 IJKL 4 MNOP 5 QRST テーブル2 ---------------- カラムA カラムB ---------------- 1 ABCD 2 EFGH 6 UVWX 10 YZ という2つのテーブルがありまして、 テーブル1のカラムAが、テーブル2のカラムAにないレコードを 取得したい。 希望取得結果 ---------------- カラムA カラムB ---------------- 3 IJKL 4 MNOP 5 QRST 現在の作成したクエリは、下記の様にサブクエリを使用しています。 select テーブル1.カラムA, テーブル1.カラムB from テーブル1 where テーブル1.カラムA NOT IN (SELECT テーブル2.カラムA FROM テーブル2) ですが、このクエリを実行しますと、なかなかデータを取得 できず、処理時間がかかりすぎてしまいます。 他に希望のデータを取得する方法でいい方法がありますでしょうか。 初心者なものでなかなかいい方法が浮かびません。 よろしくお願い致します。 |
▼Wow さんWrote: >現在の作成したクエリは、下記の様にサブクエリを使用しています。 > >select テーブル1.カラムA, > テーブル1.カラムB >from テーブル1 >where テーブル1.カラムA > NOT IN (SELECT テーブル2.カラムA > FROM テーブル2) > >ですが、このクエリを実行しますと、なかなかデータを取得 >できず、処理時間がかかりすぎてしまいます。 外部結合+Null判定はどうでしょうか? # 外部結合でテーブル1と2のカラムAを結合し、 # テーブル1全ての中でテーブル2のカラムAがNullのもの SELECT tbl_1.ColumnA, tbl_1.ColumnB FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.ColumnA = tbl_2.ColumnA WHERE (tbl_2.ColumnA Is Null) ORDER BY tbl_1.ColumnA; |
しろくろやぎさんどうもありがとうございます。 試してみたいと思います。 そこで、外部結合に関してまだ記述の仕方がよく分からないんですが、 今回は2つのテーブルのひもづけを例にしたんですが、 実際は4つのテーブルを結合しています。 その場合、FROM句にはどういう記述になるのでしょうか? 教えていただけますでしょうか。 テーブル3とテーブル4がさらに存在し、 項目はカラムAで、テーブル1のカラムAと条件付けがしたい。 select テーブル1.カラムA, テーブル1.カラムB, テーブル3.カラムB, テーブル4.カラムB from テーブル3, テーブル4, テーブル1 LEFT JOIN テーブル2 ON テーブル1.カラムA = テーブル2.カラムA WHERE (テーブル2.カラムA Is Null) AND テーブル1.カラムA = テーブル3.カラムA AND テーブル1.カラムA = テーブル4.カラムA 上記のクエリは自分が考えたもので間違っていると思いますが、 どのように記述すれば良いかがわからないので、 わかる方がいましたら教えていただいてもよろしいでしょうか。 なかなかAccessクエリの外部結合が理解できていなくて。。。 |
▼Wow さんWrote: >そこで、外部結合に関してまだ記述の仕方がよく分からないんですが、 もしかしてクエリーデザインをいつもSQLビューでされてますか?(^_^;) 普通AccessではWhere句をテーブル結合の為に使わないので.... (クエリーのデザインビューの結果ではINNER JOIN句が使われる) >なかなかAccessクエリの外部結合が理解できていなくて。。。 クエリーのデザインビューで、結合させたいフィールドを ドラッグ&ドロップすると結合線が出るのはご存知ですよね? その線をダブルクリックするか、右クリックで「結合プロパティ」 を選択すると、結合の条件設定ダイアログが表示されます。 そこに出てくるラジオボタンの選択を色々と代えて試して下さい。 テーブルがあと2つあるとのことですが、これもデザインビュー なら簡単に結合できるはずです。 結果をSQLビューで見ると、INNER JOINやらLEFT JOINがネストして、 標準的なSQLを扱う人には拒否反応が出そうですが。(^_^;) |
しろくろやぎ さんありがとうございます! >もしかしてクエリーデザインをいつもSQLビューでされてますか?(^_^;) >普通AccessではWhere句をテーブル結合の為に使わないので.... >(クエリーのデザインビューの結果ではINNER JOIN句が使われる) SQLビューでやってました。 OracleのSQLはある程度理解してるんですが、 今回初めてAccessクエリでやる事になったんです。 で、SQLビューの方がやりやすかったんで、それで作ってたんですけど。。。 うまくいかない部分が出てきてしまいまして。 >クエリーのデザインビューで、結合させたいフィールドを >ドラッグ&ドロップすると結合線が出るのはご存知ですよね? > >その線をダブルクリックするか、右クリックで「結合プロパティ」 >を選択すると、結合の条件設定ダイアログが表示されます。 >そこに出てくるラジオボタンの選択を色々と代えて試して下さい。 > >テーブルがあと2つあるとのことですが、これもデザインビュー >なら簡単に結合できるはずです。 >結果をSQLビューで見ると、INNER JOINやらLEFT JOINがネストして、 >標準的なSQLを扱う人には拒否反応が出そうですが。(^_^;) やってみます。不一致クエリとかいろいろ試してみたいと思います。 御指摘通り標準的なSQLに慣れてるんで、JOINを避けてたんですよ。 がんばってみます。 ありがとうございます! |
しろくろやぎさんありがとうございました。 選択クエリを使用して作成したところ、 無事完成しました。 処理時間も気にならない位になったので、 これで大丈夫だと思います。 助かりました。 |