• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数テーブルからデータ取得について)

複数テーブルからデータ取得について

tsukachanの回答

  • tsukachan
  • ベストアンサー率42% (202/470)
回答No.1

一つのレコードセットにまとめたいんですよね? ユニオンクエリでググってみましょう。 http://orakumiko.hp.infoseek.co.jp/tips/q_tryunion.html ↑ ググった結果で簡単なものです。 3つのクエリをユニオン(繋げて)一つのクエリに見せかける方法です。 参照しかできませんけどね。

X10agundam
質問者

補足

早速の解答ありがとうございます。 ユニオンクエリで結合させるという事なのですが、 ユニオンクエリは、列数と型に互換性がある結果セットを結合することができるのではないのでしょうか? 例えば下記のテーブルがあります。 テーブル項目にありませんが、各テーブルには、会員CD毎に履歴があります。(更新カウンター) KAIINMSTテーブル 会員CD 郵便番号 住所 番地 方書  更新カウンター 0001, 111-1111, AAAA, BBBB, CCCCC,  1 0001, 111-1111, AAAA, BBBA, CCCCB, 2 0002, 111-1111, DDDD, EEEE, FFFFF, 1 0003, 222-2222, GGGG, HHHH, IIIII, 1 KAIINSOFテーブル 会員CD 送付郵便 送付住所 送付番地 送付方書 更新カウンター 0002, 333-3333, JJJJ, KKKK, LLLL, 1 0002, 333-3333, JJJJ, KKKK, LLL2, 2 0003, 444-4444, MMMM, NNNN, OOOO, 1 DAIRIテーブル 会員CD 代理会員CD 会員区分 更新カウンター 0001, 0004, 01,    1, 0001, 0005, 01, 2, 抽出結果としては、 会員CD郵便番号 住所 番地 方書 送付郵便 送付住所 送付番地 0001, 111-1111, AAAA, BBBA, CCCCB,null,   null,  null   0002, 111-1111, DDDD, EEEE, FFFFF,333-3333, JJJJJ, KKKK 0003, 222-2222, GGGG, HHHH, IIIII,444-4444, MMMMM, NNNN 送付方書 代理会員CD 会員区分 null, 0005, 01 LLL2, null, null OOOO, null, null こんな感じでテーブルデータを抽出して結合がしたいのですが、 できますでしょうか? 宜しくお願いします。

関連するQ&A

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

    以下の二つを実行すると、2 の方がかなり速いのですが理由が分かりません。 分かる方教えてもらっていいですか? DBはMYSQLでInoDBです。 ちなみに Aは1万件、B は10万件ほど 1 のSQL SELECT * FROM A LEFT JOIN (SELECT * FROM B WHERE ・・・ GROUP BY XXX) B ON A.id = B.XXX WHERE ・・・ GROUP BY A.id 2 のSQL (SELECT * FROM A ・・・ GROUP BY ID ) A LEFT JOIN (SELECT * FROM B WHERE ・・・ GROUP BY XXX) ON A.ID = B.XXX.ID

  • ページングした後、レスポンスが悪くなりました。

    宜しくお願い致します。 全件取得用のSQL文は以下の通りです。 ------------------------------------------------ SELECT ... , isnull(T2.a, 0) AS a , isnull(T2.b, 0) AS b FROM T1 left join T2.... 複雑 WHERE isnull(T1.a, 0) - isnull(T1.b, 0) > 0 ORDER BY T1.item ------------------------------------------------ ページングために、Frameworkが以下のように編集してくらます。 ------------------------------------------------ SELECT TOP 10 * FROM ( SELECT ... , isnull(T2.a, 0) AS a , isnull(T2.b, 0) AS b FROM T1 left join T2....複雑 WHERE isnull(T1.a, 0) - isnull(T1.b, 0) > 0 ) t ORDER BY item ------------------------------------------------ 全件取得するときは、1,2秒で結果が出るのが、ページングすると50秒以上になってしまいます。 とりあえず、T1.aとT1.bがNULLのデータは検索対象外なので、WHERE分を T1.a - T1.b > 0 に修正しました。(1,2秒で結果が出るようになります) 修正はしましたけど、ページング用SQL文がなぜパフォーマンスが落ちたのか理由が説明できないです。 ご存知の方、分析していただけないでしょうか? (参考:5000件のデータのうち20件を抽出しています)

  • 複数の副問合わせにて、一つだけデータがない場合の対処法は?

    テーブルの各区分に応じて、数量を個々に集計するSQLを作成しております。 そして以下のようなSQLを作りました。 SELECT TBLA.SURYO_1 ,TBLB.SURYO_2 , TBLC.SURYO_3 ,TBLD.SURYO_4 FROM (SELECT SUM(SURYO) AS SURYO_1 FROM TEST_TABLE WHERE TEST_KUBUN = '1' GROUP BY SURYO) TBLA, (SELECT SUM(SURYO) AS SURYO_2 FROM TEST_TABLE WHERE TEST_KUBUN = '2' GROUP BY SURYO) TBLB, (SELECT SUM(SURYO) AS SURYO_3 FROM TEST_TABLE WHERE TEST_KUBUN = '3' GROUP BY SURYO) TBLC, (SELECT SUM(SURYO) AS SURYO_4 FROM TEST_TABLE WHERE TEST_KUBUN = '4' GROUP BY SURYO) TBLD しかし、この方法ですと、区分'1','2','4'はデータがあるのに対して、区分'3'は データがないことにより、SQLを実行すると、対象データがないという結果となります。 当然個別にSQLを実行すればよいですが、速度的に4回もSQLを実行するのは効率悪いので、 出来れば一回で行いたいのですけど、区分'3'がデータがなくても、他の3つの区分のデータ を取得する方法はありますでしょうか? よろしくお願いします。

  • 異なるテーブルから一括でデータを取得したい

    異なるテーブルから一括でデータを取得したいと思っています。 現在思いつくのはunionによる結合なのですが、いささかぶさいくではないか?と思ってます。 select a,b,c from x1,y,z where A union select a,b,c from x2,y,z where A ・・・ 上記のように、x1,x2が一定の数字でいくつも対象となります。 fromにはワイルドカードが使えないので、どのようにしたものかと悩んでおります。 ※selectで取得するカラム名は全テーブル同一で、検索条件も同一です。 unionがあるべき姿なのでしょうか?

  • SQL 複数のテーブルから重複なしでデータを取得

    同じフィールド名[名前]を持つテーブルが複数個あります。 仮にテーブル名を、A、B、C、Dの4個だとします。 それらのテーブルから、フィールド名[名前]のデータを重複なしで取得したいのですが、SQL文が思いつきません。 取得するフィールドは[名前]だけです。 select distinct(名前) from A union select distinct(名前) from B union select distinct(名前) from C union select distinct(名前) from D だと、各表に同じ名前が存在する場合は結果も重複してしまい、期待する結果が得られませんでした。 環境はOracle 9iです。 SQL文を教えてください。よろしくお願いします。

  • sqlのwhereで指定した条件の前後を取得したい

    テーブル=T) KEY DATA 001 あ 002 い 003 う 004 え 005 お SQL) SELECT DATA FROM T WHERE KEY = 003 ; 上記のSQLでは、「う」のデータしか取得できませんが、 「003」の前後1件、合計3件の「い」「う」「え」を取得する方法を教えて下さい。 ちなみに、 SELECT DATA FROM T WHERE KEY >= 003 AND ROWNUM <= 2 と SELECT * FROM ( SELECT DATA FROM T WHERE KEY < 003 ORDER BY KEY DESC ) WHERE ROWNUM < 1 のUNIONでは上手く行きませんでした。 よろしくお願いします。

  • SQL Server複数テーブルの連結

    在庫管理を行う上で、3つのテーブルを結合したいと考えておりますが、うまく結合できません。 【テーブル抜粋】 ・販売  販売日  部門CD  店舗CD  商品CD  販売数 ・仕入  仕入日  部門CD  店舗CD  商品CD  仕入数 ・棚卸  棚卸日  部門CD  店舗CD  商品CD  実在庫 各テーブルから、日付で絞りこんで抽出は出来ていますが、上記を結合させる方法がわかりません。 ※各テーブルの商品数がバラバラです。 例えば、棚卸にはあるが、仕入も販売もない商品。 販売にはあるが、在庫も仕入もない商品N。 試した方法、在庫を基本に販売をLEFT OUTER JOINで結合し、仕入をLEFT OUTER JOINで結合しGROUP BYで集計 SELECT 部門CD,店舗CD,商品CD,ISNULL(実在庫,0) AS Z,ISNULL(販売数,0) AS B,ISNULL(仕入数,0) AS S FROM( SELECT 部門CD,店舗CD,商品CD,SUM(実在庫) FROM 棚卸 WHERE 棚卸日 BETWEEN (開始日) AND (終了日) ORDER BY 部門CD,店舗CD,商品CD )AS ZAI LEFT OUTER JOIN( SELECT 部門CD,店舗CD,商品CD,SUM(販売数) FROM 販売 WHERE 販売日 BETWEEN (開始日) AND (終了日) ORDER BY 部門CD,店舗CD,商品CD ) AS BAI ON ZAI.商品CD=BAI.商品CD LEFT OUTER JOIN( SELECT 部門CD,店舗CD,商品CD,SUM(仕入) FROM 仕入 WHERE 仕入日 BETWEEN (開始日) AND (終了日) ORDER BY 部門CD,店舗CD,商品CD ) AS SII ON ZAI.商品CD=SII.商品CD 上記の結果、結合はしたのですが、店舗間の商品数がバラバラとなりました。 例えば、aという店舗の販売数に、b販売数がはいっていたらり? ※結合する前の、クエリは正常に抽出しておりますので、結合方法が悪いと考えております。 もしかすると、テーブルの項目をそろえて、UNION ALLでつなげばと思ったのですが、コーディング方法がわからす・・・ 結合方法をアドバイス頂けたら幸いです。

  • 副問い合わせで複数の列を返す

    こんにちは、Makotoと申します。 SQLの副問い合わせで質問があるのですが、 現在のSQLは CREATE OR REPLACE VIEW VIWTEST AS SELECT KOMOKU1, KOMOKU2 (SELECT SUM(KOMOKU3) FROM TBL WHERE A = 1 (SELECT SUM(KOMOKU4) FROM TBL WHERE A = 1 (SELECT SUM(KOMOKU5) FROM TBL WHERE A = 1 FROM M_TBL; という感じのSQLなのですが、副問い合わせの所 が見ているテーブルも条件も一緒なので1つにまとめたいのですが、うまくいきません。CURSORという関数があったのですが、VIEWでは使用できませんでした。なにかよい方法はないでしょうか? 開発環境は oracle 9i(AIX) pro*C/C++ でおこなっています。

  • 複数条件の設定

    お世話になっております。 よろしくお願い致します。 表:TABLE SN CD NO DATE --------------------- 101 A1 1 2007/12/2 101 A2 2 2007/12/4 201 A1 1 2007/12/7 201 A2 2 2007/12/9 201 A2 3 2007/12/10 301 A1 2 2007/12/3 301 A2 3 2007/12/8 このようなテーブルがあったとして、 SNごとに、CDが'A2'のNOを取得したいです。 このとき、A2が複数行あるときはDATEの新しいほうのNOを 取得したいと思います。 SN CD NO DATE --------------------- 101 A2 2 2007/12/4 201 A2 3 2007/12/10 301 A2 3 2007/12/8 取得したい表はこのような感じです。 なのですが、どうもうまくいきません。 SELECT MAX(DATE) FROM TABLE WHERE CD='A2' GROUP BY SN これを使っていろいろやってみたのですが できませんでした。 SQLをどのように書けばいいのでしょうか? どうかよろしくお願いします。 SQL Server2005です。

  • FROM テーブル 名前 ?

    SQLについての質問です. select a.name, b.id from テーブルA a テーブルB b where... というSQLのfromのあとはどういう意味なのでしょうか? テーブルAと同じ型のaを作る という意味なのでしょうか??