ACCESS2010 SQL 結合キーについて

このQ&Aのポイント
  • ACCESS2010を使用している場合、テーブルを外部結合する際、結合のキーとしてテキスト型のフィールドを使用したい場合、桁揃えする関数を使用することはできないのか疑問です。
  • 売上金額と支店マスタの2つのテーブルを外部結合し、対象月が2013年4月から7月までのデータを取得するSQLの変更後、結合キーを桁揃えするとJOINでサポートされていないエラーが発生します。
  • 結合キーとしてテキスト型のフィールドを使用する際に桁揃えする方法を教えてください。
回答を見る
  • ベストアンサー

ACCESS2010 SQL 結合キーについて

お世話になります。拙い文面ではありますがよろしくお願いいたします。 Vista ACCESS2010を使用しています。 下記SQLで2個のテーブルを外部結合していますが、テーブルの一方で結合で使用しているフィールドの桁が変更になり、テキスト型のフィールドを0埋めして外部結合しようとしています。フィールドを関数で桁揃えして結合キーとして使用することはできないものでしょうか。 ---売上金額---------- 対象月 テキスト型 商品ID テキスト型 商品名 テキスト型 支店CD テキスト型 金額  通貨型 支店CD 3ケタ→5ケタへ変更 ---支店マスタ-------- 支店CD テキスト型 支店名 テキスト型 支店ソート番号 数値型 支店CD 3ケタ・・・売上金額の支店CD変更に伴い、Format等で5ケタへ変更したい ---変更前----- SELECT a.商品ID,a.商品名,a.支店CD,b.支店名,b.支店ソート番号,a.金額 FROM 売上金額 a LEFT JOIN 支店マスタ b ON a.支店CD = b.支店CD WHERE a.対象月 >=#2013/04/01# AND a.対象月 <=#2013/07/31# GROUP BY a.商品ID,a.商品名,a.支店CD,b.支店名,b.支店ソート番号,a.金額 ---以下へ変更--- SELECT a.商品ID,a.商品名,Format([支店CD],"00000"),a.支店名,支店ソート番号,a.金額 FROM 売上金額 a LEFT JOIN 支店マスタ b ON a.支店CD = b.支店CD    WHERE a.対象月 >=#2013/04/01# AND a.対象月<=#2013/07/31# GROUP BY a.商品ID,a.商品名,Format([支店CD],"00000"),a.支店名,b.支店ソート番号,a.金額 変更後の ON以下を次のように変更するとJOINでサポートされていませんのエラーとなります。 ON Format([a.支店CD],"00000") = b.支店名  都合上フィールドとテーブル名は変更していますがそれ以外は変わりません。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

最も簡単な対応は、[支店マスタークエリ]を作成されることです。そのクエリで、列[新支店CD]を生成されると目的は達成されます。 ※本来は、支店コードという可変なデータ列ではなく長整数の一意な数字を主キーに。もちろん、列[支店コード]はあっても構いません。が、それは、あくまでも表のデータ。リレーションを内部管理するキーとしては不適です。

keroro0109
質問者

お礼

ご回答ありがとうございます。おっしゃられる通り新支店CDクエリを作成し、最小限の変更ですみました。ありがとうございます。ご指摘の通り「長整数の一意名数」での支店コードが存在していたのでこれを基に「支店コード」を作成するようにしていく予定です。リレーションを内部管理するとしては確かに不適ですね。リレーションの理解が浅かったことからマスタとしてはよくない作りになっていたのですね。ご指摘、ご教授ありがとうございました。

その他の回答 (1)

  • psgrade
  • ベストアンサー率86% (19/22)
回答No.1

よく分かりませんが、支店コード桁数が変更されたのなら、既存のコードを更新クエリーでFormat関数を用いて、3桁から5桁に書き換えてしまった方がいいと思います。 3桁のコードをそのまま残しておく必要があるのでしょうか?

keroro0109
質問者

お礼

おっしゃれらる通りです。ただコードをいましばらく残しておく必要があり、やむを得ずこのような対応で苦慮しています。ご回答ありがとうございした。

関連するQ&A

  • アクセスSQL

    アクセス初心者です。 テーブルAに(売上日、商品A売上金額、商品B売上金額、支店)フィールドがあります。 売上日フィールドは重複あります。 次のクエリを定義するSQLはどのように記載すればいいでしょうか? 第一フィールド フィールド名:売上日リスト 内容:テーブルAの売上日を重複無しで全種類抜き出し日付順ソート。 第二フィールド フィールド名:商品Aラスト売上金額 内容:第一フィールドの売上日グループで、最後の商品A売上金額 第三フィールド フィールド名:商品Bラスト売上金額 内容:第一フィールドの売上日グループで、最後の商品B売上金額 以上よろしくお願い致します。

  • accessフィールドの複数結合

    テーブルAの1つのフィールドとテーブルB内の複数のフィールドを結合させたい。例 テーブルAには社員コードと社員名、テーブルBには商品名、納入社員コード、商品管理社員コード。テーブルAの社員コードフィールドとテーブルBの2つの社員コードフィールドを結合させたいのです。テーブルAをコピーして2つ作り、それぞれをBの2つのフィールドと結合すると出来るのですが、テーブルAが社員名でなく、画像だったりするととても大きなファイルサイズになってしまいます。お答えお待ちしています。

  • ACCESS テーブルの結合

    同じmdb内で複数テーブルがあります。(テーブル1から10まで)フィールド名はすべて同じです。それぞれのテーブルのIDは1からオートナンバーになってます。 【例】 テーブル1  フィールド名: ID A B C テーブル2   フィールド名:ID A B C  ・ ・ テーブル10   フィールド名:ID A B C  ひとつのテーブルで管理したいのですが・・・教えてください。

  • アクセスで複数フィールドを結合して1フィールドを作る際

    こんにちは。 OSはWIN2KでAccess2000を使用しております。 「T_データ」テーブルには、 社員コード(数値型)、社員名(テキスト型)、 給料(数値型)、住所(テキスト型)フィールドがあります。 この4つのフィールドを以下の条件を満たしつつ 「T_結合」テーブルの「結合データ」フィールドという 一つのフィールド(テキスト型)に追加したいのです。 ------------------------------------------------ 1.社員コードは 5桁、社員名は半角30桁、 給料は10桁、住所は全角20桁。 2.社員コード、給料は右詰とし残りは0で、 社員名、住所は左詰とし、残りは空白("")で埋める。 ------------------------------------------------- 最終的に「T_結合」テーブルを1レコード85バイトの レコードとしてエクスポートするのが目標です。 アクセスはUnicodeで管理されているというので単純には いかなそうなので、どなたかご教授願います。

  • AccessのSQL 部分一致したデータの更新

    以下の様な2つのテーブルが有った場合、[商品テーブルA]と[商品テーブルB] の商品名フィールド同士の商品名が部分一致した場合、 [商品テーブルB]のIDフィールドに[商品テーブルA]のIDフィールドのID番号を 付与したいと考えております。 この様な場合のSQL文を教えて頂けませんでしょうか。 [商品テーブルA] ID  商品名 ------------- 1  A1AAAA 2  A1AAAB 3  A1AABB 4  A1ABBB 5  A1BBBB [商品テーブルB] ID  商品名 -------------    AAAB    AAAA    BBBB    AABB    ABBB SQLの結果として[商品テーブルB]が以下の様に更新される結果を期待しています。 【結果】 [商品テーブルB] ID  商品名 ------------- 2  AAAB 1  AAAA 5  BBBB 3  AABB 4  ABBB 商品名が完全一致する場合であれば、update inner join on set を使えば上手くいのですが、 部分一致の場合どの様にすれば良いのか、行き詰っています。 以上、宜しくお願い致します。

  • SQLの結合条件について

    SQLの結合条件について ・table_A ID | ATAI 01 | AAA 01 | XXX 02 | ABC 03 | DEF table_B ID | ATAI 01 | 不要 02 | 必要 03 | 必要 04 | 不要 上記のようなテーブルAとBがあるとします。 やりたいこと 1.テーブルAに存在するIDをBのIDから抽出 2.テーブルAの「ATAI」の値が’AAA’のIDは抽出対象から外す。 ※テーブルAの01IDに’AAA’と’XXX’がありますが、Bの抽出対象から外したい。 2.がうまくいきません。 select B.ID from table_A A,table_B B where A.ID = B.ID 上記のSQLに2.の条件を足して、結果を02と03にしたいです。 ※CASEは使わずにお願いします。

  • ACCESSの結合

    よろしくお願いします。 ACCESS2000で、AテーブルのA'フィールドとBテーブルのB’フィールドを結合させ、同一でないものを表示させる(クエリーで)方法を教えてください。 よろしく、お願いいたします。

  • ACCESS SQLステートメントについて初心者です。

    お知恵を貸してください。 ACCESSでSQLステートメントで 『Aテーブル』 ID  商品コード1 商品コード2 1    1111    2222 2    2222    3333 3    4444    5555   『Bテーブル(商品コードマスター)』 商品コード  商品名 1111     ああああ 2222     いいいい       3333     うううう 4444     ええええ 5555     おおおお AテーブルとBテーブルを結合して ID  商品コード1 商品名    商品コード2   商品名 1    1111  ああああ     2222    いいいい 2    2222  いいいい     3333    うううう 3    4444  ええええ     5555    おおおお というCテーブルを作りたいです。 商品コード1と商品コード2の両方共 Bテーブルの商品コードから商品名を取得したいのですが、できないのですが・・・・ 出来ればBテーブル(商品コード)を2つ作くったり等したくないのですが、SQLステートメントでどう記述すれば良いですか?      

  • アクセス:SQLでフィールドの結合できますか

    例でいいますと、 テーブル:Table_Aには フィールド:a1,a2,a3、があります ここで、bbというフィールドで、内容はa1+a2のものを得たいのですが Table_Aには、a1、a2、a3、が定義されていますが、bb、は定義されていません 事情は他の人が作ったもので、それに合わせる必要があるためです 別件ですが、bb、というフィールド名でa1、を使いたい時は select a1,a2,a3,a1 as bb from Table_A; と、書くことを教えてもらいました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2295714 今回はa1とa2が結合したものが、bbというフィールドで使いたいことです SQLではそんなことできません、という回答でもいいので よろしくお願いします

  • アクセス95の結合について (初心者です)

    アクセスの結合のことでおうかがいしたいのですが、 結合プロパティで 「Aの全レコードとBの同じ結合フィールドのレコードだけを含める」 を選択しているのですが、 結果はAとBで一致しているもののみになってしまいます。 原因は何が考えられるでしょうか? よろしくお願いします。