• ベストアンサー
  • 困ってます

ACCESSクエリで複数テーブルの値の結合について

現在、ACCESS2000で2つのテーブルの値を表示するクエリを作成中です。 テーブルは外部データよりインポートしています。 Aテーブル KEY1 | KEY2 | 値1 -------------------------- 00000001 | AAAAAAAA | 100 00000001 | BBBBBBBB | 200 00000002 | AAAAAAAA | 1000 Bテーブル KEY1 | KEY2 | 値1 -------------------------- 00000001 | AAAAAAAA | 500 00000002 | BBBBBBBB | 300 これを、 KEY1 | KEY2 | 値1 ------------------------------------------------ 00000001:00000001 | AAAAAAAA:AAAAAAAA | 100:500 ←(1) 00000001:NULL | BBBBBBBB:NULL | 200:NULL ←(2) 00000002:NULL | AAAAAAAA:NULL | 1000:NULL ←(3) NULL:00000002 | NULL:BBBBBBBB | NULL:300 ←(4) と表示したいのです。 INNER JOIN では、上記(1)しか表示されません。 また、LEFT JOIN では、(1)(2)(3)は表示されますが、(4)が表示されません。 SQLは下記です(INNER JOINを使用した場合) SELECT [Aテーブル.KEY1] & ":" & [Bテーブル.KEY1] AS KEY1, [Aテーブル.KEY2] & ":" & [Bテーブル.KEY2] AS KEY2, [Aテーブル.値1] & ":" & [Bテーブル.値1] AS 値1 FROM Aテーブル INNER JOIN Bテーブル ON ([Aテーブル].[KEY1]=[Bテーブル].[KEY1]) AND ([Aテーブル].[KEY2]=[Bテーブル].[KEY2]); どなかた教えてください。お願いします。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数551
  • ありがとう数2

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

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

#1です。 もしかしたら、unionクエリーの時点で、 重複データは、1元化されるかもしれません。 そうなれば、集計クエリーは必要なくなると思います。 すいません。確認してません。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

UNIONクエリーで作る事が出来ました。 (重複データは自動的に一元化されます) ありがとうございました。

関連するQ&A

  • ACCESSクエリで複数テーブルの抽出方法

    #1583217にて質問させていただいたものです。 私の早とちりで質問を締め切りさせていただいたのですが、クエリが要求通りに出てくれません。 再度、質問させて下さい。 現在、ACCESS2000で2つのテーブルの値を表示するクエリを作成中です。 テーブルは外部データよりインポートしています。 Aテーブル KEY1 | KEY2 | 値1 -------------------------- 00000001 | AAAAAAAA | 100 00000001 | BBBBBBBB | 200 00000002 | AAAAAAAA | 1000 Bテーブル KEY1 | KEY2 | 値1 -------------------------- 00000001 | AAAAAAAA | 500 00000002 | BBBBBBBB | 300 これを、 KEY1 | KEY2 | 値1 ---------------------------------------- NULL:00000002 | NULL:BBBBBBBB | NULL:300 と表示したいのです。(Bテーブルにあるデータのみを表示) どなかた教えてください。お願いします。

  • 複数JOINしているとCOUNTが正しく取得できな

    LAMP環境で開発をしています。 SQL文でCOUNTを求める際に、まとめて結果を求めようとして上手く行きません。 状況としては以下です。 テーブルdはidをkeyにa,b,c3つのテーブルとjoinしています。 id = 1の場合、テーブルa,b,cにマッチするレコードがそれぞれに4個、1個、0個あります。 ひとつひとつを SELECT COUNT(CASE WHEN a.name IS null THEN 1 ELSE null END) as a_count FROM d INNER JOIN a ON a.id = d.id WHERE d.id = 1 として結果を求めると4,1,0と出るのですが、まとめて SELECT COUNT(CASE WHEN a.name IS null THEN 1 ELSE null END) as a_count, COUNT(CASE WHEN b.name IS null THEN 1 ELSE null END) as b_count, COUNT(CASE WHEN c.name IS null THEN 1 ELSE null END) as c_count FROM d INNER JOIN a ON a.id = d.id INNER JOIN b ON b.id = d.id INNER JOIN c ON c.id = d.id WHERE d.id = 1 とすると28,5,0という値が返されます。 どのように書けば正しい4,1,0を得られるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Accessで親テーブルと2つの明細テーブルでできているデータのレポートを作りたい

    親テーブルと2つの明細テーブルでできているデータのレポートを作りたいのですが、レポート機能ではフォーム作成のように、詳細セクションに2つの明細テーブルのデータを表示させることはできますか? ウィザードを使って作成するとどうしても以下のようになってしまいます。 (ちなみに親テーブルと明細テーブルは伝票番号でリレーションしています) ↓↓↓↓ 伝票番号000001に対して、明細Aテーブル(2レコード)、明細Bテーブル(1レコード)あるとする。 ----------------------------------------------------------- 本来は以下のように表示したい ヘッダーセクション 伝票番号:000001  親テーブルの情報:xxxxxxx 詳細セクション  明細Aの情報 01 aaaaaaaa  明細Aの情報 02 aaaaaaaa 明細Bの情報 11 bbbbbbbb ------------------------------------------------------------ 実際は以下のように表示される ヘッダーセクション 伝票番号:000001  親テーブルの情報:xxxxxxx 詳細セクション  明細Aの情報 01 aaaaaaaa 明細Bの情報 11 bbbbbbbb  明細Aの情報 02 aaaaaaaa 明細Bの情報 11 bbbbbbbb

その他の回答 (2)

  • 回答No.3

こんにちわ。 LEFT JOINで(1)~(3)を抽出するSQLと、 (4)だけ抽出するSQLを用意して、 2つのSQLをUNION ALLで合体させたらばっちしじゃないでしょうか。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

#2(#1)さんの方法で作る事ができました。 今回はこれで行こうと思います。 また質問をする時にご協力をお願いします。 ありがとうございました。

  • 回答No.1

LEFT JOIN とright join 両方とも作って、unionで結合して、 集計クエリーで、重複分を圧縮して表示したらどうでしょうか?

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • Accessのクエリとテーブル突合せについて

    いつもお世話になっています。 Access2007で下記のような2つのテーブルをクエリで比較した際、なぜかNULLの部分だけのぞんだ結果にならないという現象があり、理由がわからず困っています。 内容としては、「(1)明細データ」のすべてと、「(2)コード表」をあて、「(3)結果リスト」のような表示でコードを追記するようなものです。 下記の「__」は表記の便せん上分かりやすいようNULLを示しています。 「(1)明細データ」はクエリで2つのテーブルを突き合わせ「区」を付けたしたもので、「(2)コード表」はマスタ用のテーブルとして手作りしています。 「(2)コード表」を手作りする際にはNULLの部分はなにも入れずに空にしています。 (1)明細データ 商品名 区 AAAAAA XX BBBBBB YY BBBBBB YY CCCCCC XX CCCCCC YY CCCCCC __ (2)コード表 商品名 区 変換CD AAAAAA XX 000101 AAAAAA YY 000102 AAAAAA __ 000199 BBBBBB XX 000201 BBBBBB YY 000202 BBBBBB __ 000299 CCCCCC XX 000201 CCCCCC YY 000202 CCCCCC __ 000299 (3)結果リスト 商品名 区 変換コード AAAAAA XX 000101 BBBBBB XX 000201 BBBBBB YY 000202 CCCCCC XX 000301 CCCCCC YY 000302 CCCCCC __ 000399☆ ところが、クエリで実現しようとするとこの「(3)結果リスト」の☆のついている一番最後の結果が CCCCCC __ ______ となってしまい、変換コード部にコードを埋め込むことができません。 こういう現象は初めての為、どのように聞くべきかわからないのですが、もし何かご存知、ないし、ヒントになり得ることを知っておりましたらお教えください。 以上、よろしくお願いいたします。

  • 複数テーブルの結合の仕方

    いつもお世話になっております。 MySQLとPHPで開発をしております。 複数のテーブルからのデータの取得方法について教えていただきたいです。 テーブル:qes(key:q_id) |q_id|memo|del_id| +------------------+ |1 |ああ|NULL | |2 |いい|NULL | |3 |うう|NULL | テーブル:ans(key:q_id、a_id) |q_id|a_id|memo|del_id| +------------------------+ |2 |1 |かか|delete| |2 |2 |きき|delete| |3 |1 |くく|NULL | |3 |2 |けけ|NULL | |3 |3 |ここ|NULL | 上記のようなテーブルがあります。 ans>q_idがないか、ans>del_idがNULLのデータを取得したいと考えています。 期待する結果は・・・ |q_id|memo|del_id| +------------------+ |1 |ああ|NULL | |2 |いい|NULL | 以下のようなクエリを発行した場合 q_id=1 は取得できるのですが、q_id=2 が取得できません。 select q.* from qes q left join ans a using(q_id) where a.a_id is NULL and a.del_id is NULL group by q.q_id order by q.q_id ASC temporary table を使用しないとできないでしょうか。 ご教示よろしくお願いいたします。 <環境> MySQL:3.23.56 PHP:Version 4.3.1

  • Accessのクエリーについて教えてください。

    Access2000を使用しています。 不慣れなので、どういう設定をしたらいいのか悩んでおります。こんなことできますか? 1.テーブルが2つ存在しており、クエリーで1つ目のテーブルから項目Aと項目B、2つ目のテーブルから項目Bの3つを表示しています。 (2つ目のテーブルにも項目Aはあります。) 2.表示されたデータの中で、項目Bともう1つの項目Bの値が異なっているものだけを表示したいと思うのですが、どのように設定したらいいのでしょうか?

  • 複数のテーブルの全てのカラムを一度に検索するには?

    検索対象のカラムがid(主キー)、bc1~bc40と41個あります。 1つのテーブルに41個のカラムを作り検索させると非常に時間がかかります。 それにインデックスを全部に付けたいですが16個までしかつけられないです。 なので、5つのテーブルにカラムを分けて全部のカラムにインデックスをつけて それぞれを検索させようと思っています。 テーブルが1つだけなら SELECT * FROM `bc` WHERE `bc1`='あいうえおかき' AND `bc2`='あいうえおかき' AND `bc3`='あいうえおかき' AND ・・・ `bc39`='あいうえおかき' AND `bc40`='あいうえおかき' ORDER BY `bc33` DESC LIMIT 0,50; のようにできますが、テーブルが複数の場合はどうしたらよいのでしょうか。 検索を試す前に下記ができるか試してみました。 SELECT COUNT(*) FROM (((`ccc` INNER JOIN `bbb` ON `ccc`.`id`=`bbb`.`id`) INNER JOIN `aaa` ON `ccc`.`id`=`aaa`.`id`) INNER JOIN `ddd` ON `ccc`.`id`=`ddd`.`id`) INNER JOIN `eee` ON `ccc`.`id`=`eee`.`id` エラーにはなりませんがカウント数が0になってしまいました。 SELECT COUNT(*) FROM (`ccc` INNER JOIN `bbb` ON `ccc`.`id`=`bbb`.`id`) INNER JOIN `aaa` ON `ccc`.`id`=`aaa`.`id` これは正確にできてカウント数100000 SELECT COUNT(*) FROM ((`ccc` INNER JOIN `bbb` ON `ccc`.`id`=`bbb`.`id`) INNER JOIN `aaa` ON `ccc`.`id`=`aaa`.`id`) INNER JOIN `ddd` ON `ccc`.`id`=`ddd`.`id` 4つ目のテーブルを入れたところから無理なようです。 他に良い方法はないのでしょうか。

    • ベストアンサー
    • MySQL
  • 同じ構成のテーブルを結合する

    AとBという全く同じ列構成からなるテーブルの結合を考えています。 イメージとしては、Aのレコードが全て表示された下にBのレコードが列挙されるような感じです。 "INNER JOIN"、"LEFT OUTER JOIN"で行った結果、AとBでキーに同じ値を持つと、どちらかの値で上書きされてしまうみたいなのでイメージ通りにはいきませんでした。また、"CROSS JOIN"ではAの右側にBの内容が追加されてしまうのもあって、イメージ通りにできませんでした。 どなたかこのSQL文が分かる方はお教えいただけないでしょうか? よろしくお願いします。 データベース:SQL Server

  • Accessのテーブルの値を更新したい

    お世話になります。 Access2000のVBAで、教えて頂ければと思います。 下記の「テーブルA」がある状態で、 「ID=1」の「フィールド:名前」の値を「名称なし」に更新したいのですが、 どのようにVBAで記載したらよいでしょうか? ------テーブルA------- ID  名前 1 やまだ ----------------------- お手数ですが何卒宜しくお願いします。

  • 複数外部結合について

    A, B, C というテーブルがあります。 Aはkey1, key2, key3, key4, key5 を持ち、 Bはkey1, key2, Cはkey3, key4, key5 を持っています。 A--- key1 key2 key3 key4 key5 001 002 001 002 003 B--- key1 key2 001 002 C--- key3 key4 key5 001 002 003 A, B, C を以下のように外部結合すれば値は取得できますが、 A.key1 = B.key1 (+) A.key2 = B.key2 (+) A.key3 = C.key3 (+) A.key4 = C.key4 (+) A.key5 = C.key5 (+) B.key1 B.key2 C.key1 C.key2 C.key3 001 002 null null null null null 001 002 003 ここに key1, key2 を持つDというテーブルを以下の様に 外部結合しても、値を持ってくることができません。 D--- key1 key2 001 002 A.key1 = B.key1 (+) A.key2 = B.key2 (+) A.key3 = C.key3 (+) A.key4 = C.key4 (+) A.key5 = C.key5 (+) B.key1 = D.key1 (+) B.key2 = D.key2 (+) B.key1 B.key2 C.key1 C.key2 C.key3 D.key1 D.key2 001 002 null null null null null null null 001 002 003 null null これってなんででしょうか? よろしくお願いします.

  • ACCESSの結合

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

  • クエリの計算結果をテーブルに格納するには?

    Windows NTでAccess2000を使っています。 クエリで関数の計算をさせてフォームで必要な数字を打ち込むと 計算結果が表示されるところまでは確認できましたが その値をテーブルに収めることはできないのでしょうか? 計算させたクエリからテーブルを作るというやり方もありますが それはもうひと手間ということになるので出来れば避けたいのです。 よろしくお願いします。

  • LEFT JOIN の結合結果について

    お世話になります。 ”SELECT Aテーブル.* Bテーブル.*  FROM Aテーブル LEFT JOIN Bテーブル ON Aテーブル.KEY = Bテーブル.KEY”を 行った場合、Aテーブルにしか存在しないデータのBテーブル側の値は常にNULLに なるようなのですが、この場合ゼロを固定に設定することは出来ないでしょうか? よろしくお願いします。 ※ORACLE 9i、PL/SQL上での処理を考えています