過去ログ

                                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)

ですが、このクエリを実行しますと、なかなかデータを取得
できず、処理時間がかかりすぎてしまいます。

他に希望のデータを取得する方法でいい方法がありますでしょうか。
初心者なものでなかなかいい方法が浮かびません。

よろしくお願い致します。

 ───────────────────────────────────────  ■題名 : Re:非等価結合について  ■名前 : しろくろやぎ  ■日付 : 04/6/9(水) 12:11  -------------------------------------------------------------------------
   ▼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;

 ───────────────────────────────────────  ■題名 : Re:非等価結合について  ■名前 : Wow  ■日付 : 04/6/9(水) 12:52  -------------------------------------------------------------------------
   しろくろやぎさんどうもありがとうございます。

試してみたいと思います。

そこで、外部結合に関してまだ記述の仕方がよく分からないんですが、
今回は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クエリの外部結合が理解できていなくて。。。

 ───────────────────────────────────────  ■題名 : Re:非等価結合について  ■名前 : しろくろやぎ  ■日付 : 04/6/9(水) 13:48  -------------------------------------------------------------------------
   ▼Wow さんWrote:
>そこで、外部結合に関してまだ記述の仕方がよく分からないんですが、

もしかしてクエリーデザインをいつもSQLビューでされてますか?(^_^;)
普通AccessではWhere句をテーブル結合の為に使わないので....
(クエリーのデザインビューの結果ではINNER JOIN句が使われる)

>なかなかAccessクエリの外部結合が理解できていなくて。。。

クエリーのデザインビューで、結合させたいフィールドを
ドラッグ&ドロップすると結合線が出るのはご存知ですよね?

その線をダブルクリックするか、右クリックで「結合プロパティ」
を選択すると、結合の条件設定ダイアログが表示されます。
そこに出てくるラジオボタンの選択を色々と代えて試して下さい。

テーブルがあと2つあるとのことですが、これもデザインビュー
なら簡単に結合できるはずです。
結果をSQLビューで見ると、INNER JOINやらLEFT JOINがネストして、
標準的なSQLを扱う人には拒否反応が出そうですが。(^_^;)

 ───────────────────────────────────────  ■題名 : Re:非等価結合について  ■名前 : Wow  ■日付 : 04/6/9(水) 14:01  -------------------------------------------------------------------------
   しろくろやぎ さんありがとうございます!

>もしかしてクエリーデザインをいつもSQLビューでされてますか?(^_^;)
>普通AccessではWhere句をテーブル結合の為に使わないので....
>(クエリーのデザインビューの結果ではINNER JOIN句が使われる)

SQLビューでやってました。
OracleのSQLはある程度理解してるんですが、
今回初めてAccessクエリでやる事になったんです。

で、SQLビューの方がやりやすかったんで、それで作ってたんですけど。。。
うまくいかない部分が出てきてしまいまして。

>クエリーのデザインビューで、結合させたいフィールドを
>ドラッグ&ドロップすると結合線が出るのはご存知ですよね?
>
>その線をダブルクリックするか、右クリックで「結合プロパティ」
>を選択すると、結合の条件設定ダイアログが表示されます。
>そこに出てくるラジオボタンの選択を色々と代えて試して下さい。
>
>テーブルがあと2つあるとのことですが、これもデザインビュー
>なら簡単に結合できるはずです。
>結果をSQLビューで見ると、INNER JOINやらLEFT JOINがネストして、
>標準的なSQLを扱う人には拒否反応が出そうですが。(^_^;)

やってみます。不一致クエリとかいろいろ試してみたいと思います。
御指摘通り標準的なSQLに慣れてるんで、JOINを避けてたんですよ。
がんばってみます。

ありがとうございます!

 ───────────────────────────────────────  ■題名 : Re:非等価結合について  ■名前 : Wow  ■日付 : 04/6/9(水) 15:47  -------------------------------------------------------------------------
   しろくろやぎさんありがとうございました。

選択クエリを使用して作成したところ、
無事完成しました。

処理時間も気にならない位になったので、
これで大丈夫だと思います。

助かりました。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 660