• 締切済み

アクセスの複雑な条件での結合について

久々に質問させていただきたいのですが、 アクセスでテーブル同士を結合させたいのですが、 現在、複雑すぎてデザインビューで表示できないので、SQLで作ったのですが、処理が重くて困っています。 やりたい結合は新しいデータと古いデータを結合したいです。 しかし、一つの結合ではデータの一貫性がないところがあり、抽出もれがおおいので、以下の条件で抽出しています。 テーブルA(日付1、姓、名前、名前カナ、日付2、・・・) テーブルB(日付3、姓、名前、名前カナ、日付4・・・) 結合条件 日付1=日付3 AND (氏名の名前=名前 OR 名前カナ=名前カナ) AND (year(日付2)=year(日付4) AND month(日付2)=month(日付4)) データ上、女性が多く、また、紙のパンチのデータのため、氏名の漢字も違っている場合があるので、このような条件にしましたが、軽くできないでしょうか? 明らかにデータがよろしくないのは承知していますが、アドバイスお願いします。

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

結合に用いる列にインデックス貼ってますか? 年と月で比較するなら、formatで年月を作って比較するとか

tamating
質問者

補足

回答ありがとうございます。 結合はインデックス付けています。 年月はそのほうが軽くなるのでしょうか?やってみましたが、相変わらず重たいです。 それぞれのテーブルが1万件以上あるので、それが原因なのでしょうか?

関連するQ&A

  • Accessでクエリの抽出条件がうまくいきません…

    お忙しいところ、恐れ入ります。 Accessで1年間の日付の入った、テーブルがあります。 それをクエリで、月単位で(一か月分)表示させたいのですが、うまくいかないので、何がいけないのか、教えていただけますでしょうか。 現在、クエリの抽出条件には、Year(Now()) And Month(Now())と記入しています……

  • アクセス クエリー抽出条件 今月初日から

    winXp access2003 クエリー デザインビューにおいて 日付フィールドを 今月の初日からで 検索したいのですが 抽出条件を >=""Year(Now())"/"Month(Now())"/"1"" >="Year(Now())"/"Month(Now())"/"1" これですと いずれも うまくいきません 抽出条件で データ型が一致しません とでます 宜しくお願い致します

  • Access2013テーブル結合クエリ

    Access2013 住所録テーブルと面談備忘録テーブルを、氏名で結合したクエリを作成したいのですが。 この二つのテーブルの氏名が重なり合わないものもあります。 この際、重なり合わない氏名などもクエリのデータシートビューに表示させる方法を教えてください。 フィールドの抽出条件になにか記入するのかなと思っています。初心者です。 宜しくお願いします。

  • Accessのクエリで2つのフィールドが同条件の場合に結合したい

    Accessのクエリで2つのフィールドが同条件の場合に結合したい 以下のようなテーブルが2つあって、その2つのフィールドが一致する場合につなげるクエリを作りたいと考えています。 【テーブル名:勤怠データ】 氏名│日付│出勤時刻 ────────────────── 鈴木│2/1│8:01 鈴木│2/2│8:02 鈴木│2/3│8:03 高橋│2/1│9:01 高橋│2/2│9:02 高橋│2/3│9:03 【テーブル名:シフト】 氏名│日付│シフト ────────────────── 鈴木│2/1│A 鈴木│2/2│B 鈴木│2/3│A 高橋│2/1│B 高橋│2/2│C 高橋│2/3│B 【クエリ:シフト勤怠データ】←作りたいもの 氏名│日付│シフト│出勤時刻 ────────────────── 鈴木│2/1│A│8:01 鈴木│2/2│B│8:02 鈴木│2/3│A│8:03 高橋│2/1│B│9:01 高橋│2/2│C│9:02 高橋│2/3│B│9:03 氏名と日付のフィールドが一致するときに結合させたいのですが、 デザイン画面でつなげればいいのかわかりません。 ご回答よろしくお願い致します。

  • Access 抽出クエリーについての条件

    先の投稿に重複しますが、 それぞれ異なるテーブルについて、 クエリーで、、 Between #5:00# And #19:00# Between 500 And 1900 上記の方法等で同じ数値ではなく、 期間に幅をもたせて一致としそれぞれの 一致データを抽出するクエリーは つくれますか? もちろん抽出対象のテーブル、列はそれぞれ同じ書式です。 > between関数を使って、 フィールドのデータ型が日付/時刻型の場合 抽出条件欄に、 > 5:00から19:00を抽出したい、 Between #5:00# And #19:00# > 5:00から25:00を抽出したい、 Between #5:00# And #23:59# OR Between #0:00# And #1:00# Access の日付/時刻型では、25:00 というような表現はできないので、上記のように分割することになります。 > また上記がテキストだった場合も、 > 500から1900を抽出したい フィールドがテキスト型の場合、テキスト比較になり数値比較とは異なる抽出結果になるので、 フィールドに Val([テキスト型フィールド]) と式を設定して数値型に変換します。このの抽出条件に、 Between 500 And 1900 と設定します。 通報する

  • アクセスのクエリで困ってます。

    契約日から6ヶ月めの日付をだして、さらにその日を検索したいんですが・・・ テーブルに契約日のデータがあります。 クエリで、    フィールドに6ヶ月: DateSerial(Year([竣工金入金日]),Month([竣工金入金日])+7,Day([竣工金入金日]))    抽出条件にBetween [開始日] And [最終日] としました。 抽出条件を入れなければ正常に値がでましたが、 抽出条件を入れると  ”式が正しく入力されていないか、複雑すぎるために評価出来ません。たとえば、数式に複雑な要素が多すぎます。変数に式の一部を割り当て、式を簡単にして下さい。” という、エラーメッセージが出てしまいます。 解消する方法を教えて下さい。

  • ACCESS2003 追加クエリの条件設定について

    ACCESS2003 追加クエリの条件設定について 条件設定用のフォーム"A"があり、 その"A"で指定された条件を元にテーブル"B"から値を抽出し、 テーブル"C"に書き込む追加クエリを作成しています。 フォーム"A"には ・「対象日」フィールド ・「月で出力」チェックボックス テーブル"B"には ・「試験開始日」 ・「試験終了日」 ・他多数項目フィールド 追加クエリではフォーム"A"の情報を元に、テーブル"B"から 「試験開始日」:<=[Forms]![F_A]![試験開始日] 「試験終了日」:>=[Forms]![F_A]![試験開始日] と、月をまたがって実施される試験が殆どのため、「対象日」に入力された日付を 網羅するデータを取り出しています。 新たに作りたいのは、フォーム"A"の「月で出力」チェックボックスにチェックがついた 時に、フォーム"A"の「対象日」フィールドから月を取り出し、テーブル"B"の「試験開始日」 「試験終了日」それぞれで月を比較し、同じ月のデータを抽出したいのですが 追加クエリの抽出条件に下記の通り記述した所、データをヒットさせる事が出来ません。 試験開始日フィールドの抽出条件 IIf([Forms]![F_A]![月で出力]=True,Year([試験開始日])=Year([Forms][F_A]![対象日]) And Month([試験開始日])=Month([Forms]![F_A]![対象日]),[試験開始日]<=[Forms]![F_A]![対象日]) 試験終了日フィールドの抽出条件 IIf([Forms]![F_A]![月で出力]=True,Year([試験終了日])=Year([Forms][F_A]![対象日]) And Month([試験終了日])=Month([Forms]![F_A]![対象日]),[試験終了日]>=[Forms]![F_A]![対象日]) どこが問題なのでしょうか… どなたかご教授お願い致します。

  • テーブルの結合について

    テーブルの結合について あるテーブルのサブクエリAがあるとして 抽出条件違いのサブクエリA’を 結合条件無しで(クロス結合で)、外部結合したいのですが そのようなことは可能でしょうか? サブクエリAのデータは残したいのです。 よろしくお願いします。

  • ACCESS 抽出条件教えてください。

    accessで商品の売り上げ管理をしようとしています。 例えば、日足テーブルがあって、日付と売数フィールドがあるとします。 ----------------------------- 日付      売数 … 2005/11/01  12 2005/11/02  10 2005/11/03  13 … … 2005/12/01  21 2005/12/02  22 2005/12/03  25 … ----------------------------- とあったとします。 このとき、月別に最大売数を出したい時、抽出条件はどのようにすればよいのでしょうか? 売数フィールドの抽出条件を DMax("売数","日足")とし、 日付フィールドの抽出条件(11月の最大売数を出したい)を Between #2005/11/01# And #2005/11/30# としても上手く行きません。 最終的に、 日付   売数 … 2005/01 20 2005/02 10 2005/03 15 2005/04 25 … といったように、月ごとに売数を抽出したい場合どのような抽出条件を使えばよろしいでしょうか? どうぞご教授願います。

  • アクセスにて2

    前回http://okwave.jp/kotaeru.php3?q=2234970にて質問させていただいたのですがその続きなのですが カレンダーはできたのですが カレンダーで選択した日付を同じフォームのテキストボックスへの 表記はできました。 テーブルの内容は氏名 日付 時間 となってます そのテーブルに入力したいのですができますでしょうか?? あとカレンダーフォームを起動後当日もっていきたいのですが Private Sub Form_Open(Cancel As Integer) Me.calendar0.Year = Year(Date) Me.calendar0.Month = Month(Date) Me.calendar0.Day = Day(Date) Me.calendar0.Value = Date End Sub to しているのですがどうもいかないのですが原因わかりますでしょうか?? フォーム内で氏名(テキストボックス)の内容を前回入力内容を残しているのですが そのままレコードの移動をすると氏名以外の内容は テーブルデータに落ちるのですが 内容を残すだけではデータとして 落ちないのでしょうか?? 質問ばかりで申し訳ありません

専門家に質問してみよう