DB2から複数の名称を取得するための効果的なSQLとは?

このQ&Aのポイント
  • DB2の区分とフラグを利用して、DB1の名称を一括取得するSQLを作成したいです。
  • 現在は1つのSQLでDB2の複数の名称を取得する方法を模索しています。
  • 具体的なSQLの作成方法についてアドバイスをいただけますでしょうか。
回答を見る
  • ベストアンサー

SQLの作成について

SQLの作成について 以下のようなDBがあるとします。 ---------------------- DB1(マスタ)  区分   フラグ  名称   A    1    男   A    2    女   B    1    車   B    2    飛行機   B    3    電車   C    1    コンビニ   C    2    スーパー   C    3    百貨店   D    1    デスクトップ   D    2    ノート ---------------------- ----------------------- DB2  区分1 フラグ1 名称1 ・・・ 区分4 フラグ4 名称4   A   2           D    1 ----------------------- DB2の区分とフラグから、DB1を参照して 取ってきたDB1の名称をDB2に書き込みたいです。 名称の1つ毎に、SQLを発行し、それぞれ名称を取得するなら where DB1.区分=DB2.区分 and DB1.フラグ = DB2.フラグ みたいな感じでそのまま出来ると思いますが、 今は、1つのSQLでDB2の複数の名称を一気に取得したいと考えてます。 どのようなSQLが良いのでしょうか

  • Oracle
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

こういうことでしょうか。 select  DB2.区分1,DB2.フラグ1,M1.名称  ,DB2.区分2,DB2.フラグ2,M2.名称  ,DB2.区分3,DB2.フラグ3,M3.名称  ,DB2.区分4,DB2.フラグ4,M4.名称 from  DB2   inner join DB1 M1 on M1.区分 = DB2.区分1 and M1.フラグ = DB2.フラグ1   inner join DB1 M2 on M2.区分 = DB2.区分2 and M2.フラグ = DB2.フラグ2   inner join DB1 M3 on M3.区分 = DB2.区分3 and M3.フラグ = DB2.フラグ3   inner join DB1 M4 on M4.区分 = DB2.区分4 and M4.フラグ = DB2.フラグ4;

evaag777
質問者

お礼

無事うまく取得する事ができました。 ご回答、どうもありがとうございました。

関連するQ&A

  • SQLがわかりません

    初めての投稿です。 SQL自体があまり理解していないので、どのようなSQLになるのかわかりません。 使用DB HIRDB テーブル名   |キー ファイルマスタ |A,B ユーザマスタ  |C ファイルサブ1  |A,C ファイルサブ2  |B,C 内容 ファイルマスタのキーAを使いファイルサブ1のファイル名を取得 またキーBを使いファイルサブ2のファイル名を取得します。 そして、ファイルサブ1・ファイルサブ2には ユーザマスタのキーCがありキーCを使いユーザー名称を取得します。 表示はこのようにしたいです。 ファイルサブ1ユーザ名称|ファイルサブ1ファイル名|ファイルサブ2ユーザ名称|ファイルサブ2ファイル名 わかりづらい説明かもしれませんが、宜しくお願いします。

  • SQLの作成について

    以下のSQLが作りたいのですが 作れなくて困っています。 有識者の方、お助けください。 環境:SqlServer2008 ★詳細説明 テーブルA、B、Cがあるとします。 A-B 1対1 B-C は1対N A,B,Cは全て検索・表示対象になります。 A-Bに対する検索表示は問題ないのですが Cの発送区分(1:未発送 2:発送済み)を検索条件と するSQL作成に悩んでおります。 ★テーブル・構成データ A 年度 顧客CD 顧客名称 2010 1000 A社 2010 1001 B社 2010 1002 C社 2010 1003 D社 B 年度 顧客CD サービス開始日 2010 1000  2011/04/1 2010 1001  2011/04/2 2010 1002  2011/04/3 2010 1003  2011/04/4 C 年度 顧客CD 部署 発送区分 発送日 2010 1000 A 1 2010 1001 A 1 2010 1001 B 2 2010/10/11 2010 1001 C 2 2010/10/12 2010 1003 D 1 2010 1003 D 2 2010/10/20 ★実現したいSQL 1.発送区分に検索条件を設定しない場合   年度 顧客CD 発送区分 発送日   2010 1000 1   2010 1001 2 2010/10/12   2010 1002 1   2010 1003 2     2010/10/20 2.発送区分を未発送   年度 顧客CD 発送区分 発送日   2010 1000 1   2010 1002 1 3.発送区分を発送済み   年度 顧客CD 発送区分 発送日   2010 1001 2 2010/10/12   2010 1003 2 2010/10/20 1~3を1回のSQLで実行したいのですが 実現できておりません。 よろしくお願いします。

  • SQL

    以下のようなテーブルがあり、 区分に2、3、4があれば抽出しないという SQL文を教えていただければと思います。 (SQLSERVER2000を使用しています) 名称    | 区分 テストa |  1 テストa |  1  テストa |  2 テストb |  1 テストb |  1 テストc |  1 テストc |  2 テストc |  3 テストc |  4 テストc |  5 テストd |  1 テストd |  1 テストd |  5 テストd |  5 テストd |  5 例でいくとテストaは区分が1、1、2で 2がはいっているので抽出しない。 テストbは1、1なので抽出する。 テストcは1、2、3、4、5で2、3、4がはいっている ので抽出しない。 テストdは1、1、5、5、5なので抽出する。 つまり結果としては テストaとテストdが抽出されるということです。 質問もままならないほどSQL初心者のため、 どうかご回答いただきたいと思います。 よろしくお願いします!!

  • 同一コード毎に最新の名称を取得するSQL

    いつもお世話になります。 以下のデータ構造において、以下の条件にあてはまるレコードを 取得するにはどのようなSQLになりますでしょうか。 (1)同一のコード、区分において、有効期間開始日が最新のもの (2)同一のコード、区分、有効期間開始日において、有効期間終了日が最新のもの 【テーブル】 ※主キー:コード、区分、有効期間開始日、有効期間終了日 コード 区分 有効期間開始日 有効期間終了日 名前 10000 A01 19800101 99991231 名称1 10000 A01 20000101 99991231 名称2 20000 A01 19800101 19991231 名称3 30000 C01 19800101 19991231 名称4 30000 C01 19800101 99991231 名称5 30000 B01 20000101 99991231 名称6 40000 D01 19800101 99991231 名称7 40000 D01 20000101 20201231 名称8 ↓ 【取得結果】 10000 A01 20000101 99991231 名称2 20000 A01 19800101 19991231 名称3 30000 C01 19800101 99991231 名称5 30000 B01 20000101 99991231 名称6 40000 D01 20000101 20201231 名称8 ようするに、最新データの名前のデータを取得したいのですが、その最新の 定義が上記にあげたものになります。 連続投稿になってしまい申し訳ないのですが、どうしてもスマートな SQLを思いつかず、皆様のお知恵をお借りしたいと思った次第です。 宜しくお願いします。

  • SQLについて教えてください

    SQL*plusで次のようなことをしたいのですがSQLでどのように書けばよいでしょうか? 教えてください。 以下の「マスターデータ」「県名マスター」「種別マスター」が存在しています。 1.県コード、種別コードでグルーピングします。 2.県名を県名マスターの県コードで一致させて取得します。 3.種別名称を種別マスターの種別コードで一致させて取得します。 4.年月日が最新のレコードを取得します。    ※ただしフラグ0、2が存在する場合はフラグ2の年月日が最新のものを取得します。 データレポートを使用しているためSQLでやるしかないのですが。。。 すみませんがよろしくお願いします。 【マスターデータ】 県コード 種別コード 年月日  金額 変更年月日 フラグ ------------------------------------------------------------------------- 11   02    20080101 100  20080201   0    (1) 11   02    20080102 200  20080202   2    (2) 11   03    20080103 300  20080203   0    (3)種別03のため対象外 12   03    20070101 400  20070201   2    (4) 12   03    20070102 500  20070202   0    (5) 12   02    20070103 600  20070203   1    (6)フラグ1のため対象外 13   03    20070102 700  20070202   0    (7) 【県名マスター】 県コード 県名 ------------------------------------------------------------------------- 11   埼玉県 12   東京都 13   千葉県 【種別マスター】 種別コード 種別名称 -------------------------------------------------------------------------- 02    1種 03    2種 【結果】 県名   種別名称 年月日  金額 変更年月日 フラグ -------------------------------------------------------------------------- 埼玉県  1種   20080102 200  20080202  2     (2)   東京都  2種   20070101 400  20070201  2     (4) 千葉県  2種   20070102 700  20070202  0     (7)

  • 条件に応じたSQL文について

    お世話になっております。 以下の場合どのようにSQLを書くかで困っています。 どうかお願いします。 DBはOracle10gです。 テーブルA 区分   integer コード   integer(上記区分が0の場合は得意先のコード、1の場合は商品のコードが登録されています。) 得意先マスタ コード integer 名称 varchar 商品マスタ コード integer 名称 varchar 上記のテーブルAを読んで、 区分が0の場合は得意先マスタの名称 区分が1の場合は商品マスタの名称 をもってきたいのですがやり方がわかりません。 どうかよろしくお願いします。

  • SQL

    SQLの初心者です。 次のようなテーブルがあるとします。 項目:A , B , C , D このテーブル合計を求めたいのです。 条件は、 同一テーブルでB=10の時のAの合計とD=10の時のCの合計の合計です。 B=10の時のAの合計は「sql sum(A) from テーブル where B=10」となります。 D=10の時のCの合計は「sql sum(C) from テーブル where D=10」となります。 この2つの合計を求めたいのです。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • SQLについて

    MySQLの5.0を使用しています。 同一のテーブルA(a,b,c,d)があり、その中の区分が"1"のものと"2"のものを同一行で取得したいのですがどのようにすればよろしいでしょうか? テーブルAはaとbが主キーでcが区分であるときに結果としては a,b,c,d1,d2 ※d1はテーブルAのうち区分が1のもの ※d2はテーブルAのうち区分が2のもの すみませんがよろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQLについて

    以下のSQLを実行すると。 SQL実行中に以下のエラーが発生しました。 エラーコード:907 [Oracle][ODBC][Ora]ORA-00907: 右カッコがありません。 というエラーが表示されます。 どこがおかしいでしょうか? SELECT Q1.Pコード, Q1.Qコード, T1.E名称 A名称, T2.E名称 B名称, T3.E名称 C名称, T4.E名称 D名称, FROM ( ( ( ( SELECT Pコード, Qコード, Aコード, Bコード, Cコード, Dコード, FROM 報告書 WHERE Pコード = '0001' AND Qコード = '0001' AND ) Q1 INNER JOIN Eマスタ T1 ON Q1.Aコード = T1.Eコード ) INNER JOIN Eマスタ T2 ON Q1.Bコード = T2.Eコード ) INNER JOIN Eマスタ T3 ON Q1.Cコード = T3.Eコード ) INNER JOIN Eマスタ T4 ON Q1.Dコード = T4.Eコード ORDER BY Pコード, Qコード;

  • mdbからのデータ取得をSQLで行いたいのですが・・・

    VB.NETで開発中です。 “TEST”という名称のmdb(MS-Access)のDBに接続し、“区分マスタ”というテーブルからデータを取得したいのですが、これをSQL文で行いたいと思っています。 サンプル的なコードを記述して教えていただけると助かります。 よろしくお願い致します。