• 締切済み

複数テーブルからのデータ取得方法

SQL初心者ですが、教えてください。 (oracle10g を使用します) 下記の様なテーブルがあります。 テーブル名  カラム名 MEIBO    NAME, TYPE, HOME_CODE, OFFICE_CODE HOME     HOME_CODE, HOME_ADR, HOME_TEL OFFICE    OFFICE_CODE, OFFICE_ADR, OFFICE_TEL MEIBOテーブルのTYPEが1の場合、HOME_CODEをキーとして、HOMEテーブルより HOME_ADRとHOME_TELを取得、 MEIBOテーブルのTYPEが2の場合、OFFICE_CODEをキーとして、OFFICEテーブルよりOFFICE_CODE,OFFICE_ADR,OFFICE_TELを取得し、 下記のイメージのように出力をしたいです。 NAME TYPE   ADR    TEL -------------------------------------- 山田  1    東京都… 03-XXXX-XXXX 鈴木  2    神奈川県 045-XXX-XXXX 以上です。 ご存知の方いらっしゃいましたら よろしくお願い致します。

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

みんなの回答

回答No.1

select name,type,home_adr,home_tel from meibo a,home b where type=1 and a.home_code=b.home_code union all select name,type,office_adr,office_tel from meibo a,home b where type=2 and a.office_code=b.office_code ; というのが、判りやすくて良いんじゃないですかね。

kenzico
質問者

お礼

大変、助かりました。 本当にありがとうございました。

関連するQ&A

  • 複数のテーブルからのデータ取得と連結

    いつもお世話になっております。 JavaでDBからデータを取得するプログラムを作成中です。 単純なものは問題無いのですが、 複数のテーブルからデータを取得し、そのデータを連結させるプログラムを作りたいのですがわからず困っています。 テーブル1 コードA(Key)       名称A テーブル2 コードB(Key)       名称B テーブル3 コードA(Key)       コードB(Key)       コードC(Key)       名称C となっており、取得したデータを 名称A+名称B+名称C と表示したいのですが、どのような処理を行えばよいのでしょうか? ちなみに複数のレコードを操作するプログラムも作ったことが無いレベルです。 どなたかご教授お願いします。

    • ベストアンサー
    • Java
  • 2つのテーブルを結合する条件

    現在、MySQLを使用しており2つのテーブルの結合条件がわからないので教えてください。 name_masterとmeiboの2つのテーブルがあります。 meiboとname_masterを結合させてname_idとname_id2が日本語に置き換わった状態で 取得させたいと思っています。どのようにwhere句の条件を作成すればよいでしょうか。 取得する項目のイメージとしては以下の3つが取得できるようにしたいです。 「meibo.no, meibo.name_idの日本語, meibo.name_id2の日本語」 【name_masterテーブル】 id name 1  ポチ 2  タマ 3  ミケ 4  ハチ 5  タロウ 【meiboテーブル】 no  name_id  name_id2 1    3     1 2    4     2 3    5     3

    • ベストアンサー
    • MySQL
  • ORACLE 効率の良いDB設計について

    複合キーとはこういう時に使うのでしょうか? テーブルが2つあるとします。 テーブルAは、CODE テーブルBは、CODE1,CODE2,NAME とします。 テーブルAの"CODE"とテーブルBの"CODE1"+"CODE2"をキーに テーブルBの"NAME"を取得する場合。 たとえばテーブルAのCODEに"A1B1"という値が入っていて テーブルBのCODE1,CODE2の値にそれぞれ、"A1"、"B1"が入っている場合、テーブルBの主キーはCODE1とCODE2の二つにした方が効率がいいですか? select テーブルA.code,テーブルB.name from テーブルA,テーブルB where テーブルA.code = テーブルB.code1 || テーブルB.code2 ↑あっているかちょっと自信がないですが こういった処理をしたいと思っています。 よろしくお願い致します。

  • データ取得

    name*****key1****key2****date ------------------------------- AAA*******1*******1*****2003/01 BBB*******2*******2*****2002/12 AAA*******1*******2*****2003/01 BBB*******1*******2*****2002/11 BBB*******2*******2*****2002/11 AAA*******2*******2*****2003/01 AAA*******2*******2*****2002/12 ------------------------------- (※全てのフィールドが同じ情報のレコードはない) ****は意味はありません。表を見やすくするために書いただけです。 上記のテーブルから下記のデータを取得したいと 考えています。 AAA*****2002/12*****1 AAA*****2003/01*****3 BBB*****2002/11*****2 BBB*****2002/12*****1 name列とdate列の重複しないレコードの件数を取得したいのですが どのようなSQLを記述すればよろしいでしょうか?

  • テーブルデータの絞込み条件

    MySQL4.1、PHP Version 4.3.9を使用しています。 下記のような2つのテーブルA,Bから テーブルAに存在するキー(no)のデータのみ取得したいのですが、 どのようにWHERE文を書いたら一回のSQL文で取得出来るのでしょうか。 テーブルA no |name 1 |たろう 2 |はなこ 3 |じろう テーブルB no |old 1 |16 3 |18 取得したい結果テーブル no |name 2 |はなこ 良い方法が見つかりません。 宜しくお願いします。

  • 複数テーブルの削除

    お世話になります。 うまい資料が見つからなかったので質問させてください。 例えば、下記のようなテーブルが3つあったとします。 <table1> id name date <table2> id tel <table3> id etc name,date,tel,etcは同タイミングで一括に登録され、3テーブルともに共通のidで保存されます。 この時、table1のdate(日付が入ります)が30日以上経過しているデータについて、いずれのテーブルからも削除したいと思っています。 こんな場合、どんなSQL文を書けば良いのでしょうか? お分かりになる方、何卒よろしくお願いしますm(_ _)m

    • ベストアンサー
    • MySQL
  • テーブルから取得したデータをホームページに表示する

    ホームページを作成しておりますが、テーブルから取得した文字列から一部を取得し、文字連結後にホームページに表示させる方法を探しております。 初歩的な質問で大変申し訳ございませんが、ご教示願います。 なお、プログラムはVisual Studio Codeを使用しており、ブラウザはIE11です。 table_a --------------------------------- date | code | comment --------------------------------- 2020/09/05 | 0101101 | --------------------------------- 2020/09/30 | 0101011 | javascript select code from table_a where date = "2020/09/05"; var aaa = results[0].code.substr( 0, 2 ); var bbb = "11"+aaa; console.log('bbb' + bbb); →11011 画面上表示 1

  • WHERE句内で「値=最大値」を取得する方法

    どのようなSQLを書けばよいのかわからないので質問させてください。 以下、MasterテーブルとDataテーブルがあります。 MasterテーブルとDataテーブルのレコードを結合して取得したいと思っています。 ただし、Dataテーブルのレコードはkey1,key2,key3でグループ化した中で最新の日付の レコードと結合したいと思っています。 以下のような取得結果を想定しているのですがどのようなSQLを書けばよろしいでしょうか。 ちなみに SELECT m.key1, m.key2, m.key3, m.type, m.name, d.date, d.value FROM test.master m, test.data d; where m.key1 = d.key1 and m.key2 = d.key2 and m.key3 = d.key3 and d.date = (select Max(date) from data group by key1, key2, key3) というSQLではエラーになってしまいました。 【取得結果】 key1 key2 key3 type  name      date         value -------------------------------------------------------------------------------------------------------------  1  2   3  11   name1  2016-12-17 12:00:00    30  4  5   6  22   name2  2016-12-18 12:00:00    30  7  8   9  33   name3  2016-12-19 12:00:00    30 両者とも主キーはkey1,key2,key3となります。 【Master】 key1 key2 key3 type  name ------------------------------------------------------------  1  2   3  11   name1  4  5   6  22   name2  7  8   9  33   name3 【Data】 key1 key2 key3      date       value ---------------------------------------------------------------------------------  1  2   3   2016-12-17 10:00:00    10  1  2   3   2016-12-17 11:00:00    20  1  2   3   2016-12-17 12:00:00    30  4  5   6   2016-12-18 10:00:00    10  4  5   6   2016-12-18 11:00:00    20  4  5   6   2016-12-18 12:00:00    30  7  8   9   2016-12-19 10:00:00    10  7  8   9   2016-12-19 11:00:00    20  7  8   9   2016-12-19 12:00:00    30

    • ベストアンサー
    • MySQL
  • js 条件に応じたneme値の取得方法について

    下記のようなselect内でのjsのname値の取得方法に関してご教授ください。 どなたかお助けいただけると幸いです。どうぞよろしくお願いいたします。 末尾から5桁0でjAのname値を取得 下記の <option value="A00000">関東</option> 末尾から3桁0でjPのname値を取得 下記の<option value="A14000">神奈川県</option> それ以外はjZのname値を取得    下記の<option value="A14100">横浜市</option> ※現在は下記のjsコードには桁が3桁ならという条件が入っており、中途半端な状態です。 ▼html <select onchange="javascript:setAreaCode(this.value);" name="code"> <option value="@" selected> ▼下記から選択して下さい</option> <option value="A00000"> ┣関東</option> <option value="A14000"> ┣神奈川県</option> <option value="A14100"> ┃┣横浜市</option> </select> ▲html <script> <!-- // エリアname値取得 function setAreaCode(code) { document.getElementsByName("jA").item(0).value = ""; document.getElementsByName("jP").item(0).value = ""; document.getElementsByName("jZ").item(0).value = ""; if(code.length == 5) { document.getElementsByName("jA").item(0).value = code; } else if (code.length == 3){ document.getElementsByName("jP").item(0).value = code; } else { document.getElementsByName("jZ").item(0).value = code; } } --> </script>

  • データの取得方法

    Aテーブル{ id char(3) not null, name varchar(10), a_no char(5), b_no char(5), c_no char(5), date timestamp } Bマスタ{ no char(5), name char(10) } 上記のようなDBがあるのですがAテーブルのa_no、b_no、c_noに入るのはBマスタのnoになります。 下記のようにデータを取得したい場合、どうすればうまく取得できるのでしょうか。 A.id, A.name, A.a_no, カラム名をname1としてB.name, b_no, カラム名をname2としてB.name, c_no, カラム名をname3としてB.name そんなに難しいことではないと思うのですが、考えれば考えるだけ頭の中でこんがらがってきて困っています。 よろしくお願いします。

    • ベストアンサー
    • MySQL