異なるテーブルの結合方法を教えてください

このQ&Aのポイント
  • 異なるテーブルの結合方法についてお教えします。同じフィールド名を持つ異なるテーブルから特定の値を取得する方法を解説します。
  • テーブルAとテーブルBという異なるテーブルから、フィールド1が'AAAAAA'である行を結合して取得する方法について説明します。
  • テーブルAとテーブルBは異なる表であり、フィールド1が'AAAAAA'である行を取得するために結合する方法を解説します。
回答を見る
  • ベストアンサー

異なるテーブルの結合方法を教えてください

下記のような同一フィールド名を持つ異なるテーブルがあります。 tableA key1 field1 0007 AAAAAA 0009 B----- tableB key1 field1 0001 AAAAAA 0002 B----- 0003 AAAAAA 0004 C----- 0005 D----- 0006 AAAAAA 0008 E----- この2つテーブルから field1='AAAAAA' となる列を取得して下記結果を得たいと考えています。 key1 field1 0007 AAAAAA 0006 AAAAAA 0003 AAAAAA 0001 AAAAAA お教え頂きたくお願いいたします。

noname#221941
noname#221941
  • MySQL
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5081/13277)
回答No.1

select key1, field1 from tableA where field1 = 'AAAAAA' union select key1, field1 from tableB where field1 = 'AAAAAA' order by key1 desc;

noname#221941
質問者

お礼

早速、試行したところ、パフォーマンスも含めて期待通りの結果を得ることができました。 UNION についても使い道がいまひとつ理解できていなかったのですが、大変参考になり助かりました。 ありがとうございました。

関連するQ&A

  • テーブルの差分をとる結合

    TableAとTableBがあります。構造は同じです。 中身は下記のようだとします。 TableA      TableB ID VALUE     ID VALUE 1 A       3 C 2 B       4 D 3 C        差分結合結果を下記のようにとりたいのです。 1 A 2 B 4 D 良い方法をご存じでしたら、ご教授よろしくお願い致します。

  • 2つのテーブルを結合する際にIDを割り当てたい

    PHPでmySQLを作成しています。 現在学習中なのですが、自己解決できない問題が発生したのでどうかお知恵をお貸しください。 --- 同じデータベースにTableAとTableBがあります。 中身は下記のようだとします。 TableA      |  TableB id  name time | name time :   :   :  |  C1   D2 101 A1  B1  |  C2   D2    102 A2  B2  |   :    : 103 A3  B3  |  C20  C20 --- テーブルAのカラムid、name、timeの3カラム、テーブルBはname、timeの2カラムです。 これを --- TableA        TableB id  name time  name time :   :   : 101 A1  B1 102 A2  B2 103 A3  B3 104 C1  D1 105 C2  D2 :   :   : 123 C20  D20 --- とするような方法を教えてください。(TableBはレコードなし) テーブルの結合ではIDが割り当てられず、上手な方法が思いつきません。 どうかご教示のほど、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • テーブルの内容で更新したいのですが

    下記のようにテーブルがあります。 TableA colA colB ---- ----  A   1  B   2  C   3 TableB colA colB ---- ----  A   1  A   2  C   3 TableAに対してTableBとcolAが一致するcolBの合計を加算したいのです。 結果として TableA colA colB ---- ----  A   4  B   2  C   6 AはTableBに2レコードあるので合計3が加算されて4 BはTableBにレコードがないので変わらず2 CはTableBに1レコードあるので3が加算されて6 SQLでこのような更新処理(update)はできないでしょうか? よろしくお願い致します。

  • SQLでテーブルを結合した結果を取り出し

    SQLで以下の様なテーブルがあります。 tableA、tableB、tableCを使って、IDとNUMとRANKを結合し、 ID毎に、 RANKが1つでもあったら、”○”でその数を RANKが1つもなかったら、”×”で0を 取り出したい。 「oracle10g」です。 -- tableA ID,NUM,NAME,・・・・・ 000001,001, 000001,002, 000001,003, 000002,001, 000003,001, 000003,002, -- tableB ID,NUM,RANK 000001,001,A 000001,001,B 000001,001,C 000001,002,A 000001,003,C 000002,001,B 000002,002,B 000003,001,A 000003,002,A 000003,002,C --tableC RANK,NAME A, B, C, 結果として、 ID,RANK,判定,個数 000001,A,○,2 000001,B,○,1 000001,C,○,2 000002,A,×,0 000002,B,○,2 000003,A,○,2 000003,B,×,0 000003,C,○,1 を得たいです。 どのようなSQLにしたらよいか、よろしくお願いします。

  • ビュー(インラインビュー)で集約した結果と結合するSQLについて

    テーブルAを複数のキー項目で集約した結果と、テーブルBを結合しようとしています。 インラインビュー(もしくはビュー)で予め集約を行う、以下のようなSQLを考えました。 候補<1> MAX関数でTableA.列1を絞る select ... from (select max(列1),列2,列3,列4 from TableA group by 列2,列3,列4) TableA2,Table_B where TableA.列2=TableB.列2 and ...; 候補<2> ROW_NUMBER関数で列1の順位を取得し、Where句で順位=1とすることでTableA.列1を絞る select ... from (select 列2,列3,列4 from TableA group by 列2,列3,列4 row_number() over (partition by 列2,列3,列4 order by 列1) RN) TableA2,Table_B where TableA.列2=TableB.列2 and ... and RN=1; ※候補<1><2>で結果が異なることがありますが、ともかく 「インラインビュー(もしくはビュー)で予め集約を行う」がやりたいことです。 しかしこのようなクエリだと、インラインビューでもビューでも、 性能がでません。実行計画を確認したところ、TableA,TableBの結合で生成される レコードごとに毎回集約を行っているようで、膨大なクエリ数が発生していました。 ビューやインラインビューで上記のように集約を行うと危険、とはよく聞きますが... ビューやインラインビューで集約した結果をひとつのテーブルとみなして結合するなど、 レコードごとに集約を行わないようなノウハウがありましたら、お教え願います。

  • likeとjoinで詰まってます。助けてください。

    ASP+SQLServerを使用することになりました。(どちらも不得意です) 簡単なことかもしれませんがよく分からず数日悩んだ末、混乱してきたので質問させて頂きます。 助言をお願いします。 tableAにはa,b,c,d,eの5つのカラムがあります。 1) hogeと言う文字列が含まれたデータをc,d,eの三つのカラムの中から抽出。 2) 更に、その抽出結果が含まれたデータをtableBのカラムfから抽出。 3) 最終的にtableA.a, tableA.b, tableA.c, tableB.fと言う一覧を出したい。 のですが思ったように行きません。 1)の3つ目のカラムをtableB.fとinner join出来たら良いのに。と思いますが 1)が含まれる文字列になるので上手く行きません。 分かり難い表現で申し訳ありません。助けてください。 宜しくお願いします。

  • SQL:テーブル結合で該当レコードがない場合

    SELECT TableA.ID,SUM(TableA.量),TableB.金額 FROM TableA,TableB WHERE TableA.ID = TableB.ID GROUP BY TableA.ID,TableA.量,TableB.金額 こんな感じのSQLなんですが TableAをメインテーブルとして ↓のような結果を得るように作り変えれないか考えています ■TableBとの結合レコードあり(金額登録あり) 1,50,1500 ■TableBとの結合レコードあり(金額登録なし) 1,50,(NULLかスペース) 考えているんですが思いつかないのでヒントいただけたらと思います。宜しくお願いします。

  • テーブル結合について

    テーブルの結合についてお聞きしたいことがあります。 カラム「KEY」を結合条件に テーブルA、B、Cを結合して【取りたい結果】のようなデータを取りたいと思っています。 しかし、テーブルAにBとCをLEFT JOINを結合した所、 【取得された結果】のデータが取得されました。 どのような結合をしたら期待通りの結果が得られるのでしょうか? 回答宜しくお願いします。 【取得された結果】 key dataA dataB dataC ------------------------------------------------- 1 A-1 B-1 C-1 A-1 B-1 C-2 A-1 B-1 C-3 2 A-2 3 A-3 【取りたい結果】 key dataA dataB dataC ------------------------------------------------- 1 A-1 B-1 C-1 A-1 C-2 A-1 C-3 2 A-2 3 A-3 【テーブルA】 key dataA --------------------- 1 A-1 2 A-2 3 A-3 【テーブルB】 key dataB --------------------- 1 B-1 【テーブルC】 key dataC --------------------- 1 C-1 1 C-2 1 C-3

  • ACCESSテーブル2つのデータの比較について

    アクセステーブル2つのデータ比較について質問があります、 宜しくお願いいたします。 Access, Excel, VBは初心者レベルです。 TableA,TableBというフォーマットが同じなテーブルがあり、 データが同じかを比較をし、どちらかのテーブルにないエントリーが ある場合はそれを出したいと思います。 途中まで出来たのですが、uniqueではないデータがある為に正確な情報がでません。 具体的には: TableA        | TableB Field1 Field2 | Field1 Field2 AAA 10 | AAA 10 BBB 100 | BBB 100 CCC 200 | CCC 200 CCC 200 | EEE 100 DDD 100 | 希望の答えは Field1 Field2 Field3 CCC 200 NotInB <--- これがでません DDD 100   NotInB  <--- これはだせました EEE 100 NotInA  <--- これもだせました 以下のようなものを書いたのですが、CCCのエントリーがTableBに 一件あるので件数が違うにもかかわらずひけませんでした。 SELECT TableA.*, "NotInB" as Field3 FROM TableA LEFT JOIN TableB ON (TableA.Field1=TableB.Field1) AND (TableA.Field2=TableB.Field2) WHERE TableB.Field1 Is Null; UNION ALL SELECT TableA.*, "NotInB" as Field3 FROM TableA RIGHT JOIN TableB ON (TableA.Field1=TableB.Field1) AND (TableA.Field2=TableB.Field2) WHERE TableA.Field1 Is Null; 一致したらフラグを立てて、再チェックしないようにすればいいのだと思うのですが、アクセスのクエリ、VBなどでどのようにすればできますか?  もしくはアクセスからxlsなどに落としてから、ファイルの状態で比較 (会社で使うので外部ソフト等が使えません) をVBでするといった方法を検討した方がいいのでしょうか? 色々調べてみたのですが、どっちもやり方が分からないので、 それはそもそも出来ないよなどの アドバイスもございましたら、どうぞ宜しくお願いいたします。

  • 2つのテーブル結合

    Oracle10g使用しています。 テーブルAとテーブルBを結合させてデータを取得したいと思っています。 [テーブルA] ID name 1 A 2 B 3 C 4 D [テーブルB] ID SEQ VALUE 1 1 111 2 1 222 2 2 333 3 1 444 4 1 555 4 2 666 4 3 777 テーブルAのキーは[ID]、テーブルBのキーは[ID,SEQ]です。 この二つを連結して以下のように出力したいと思っています。 ID SEQ NAME VALUE 1 1 A 111 2 2 B 333 3 1 C 444 4 3 D 777 テーブルBのデータは同じIDのうち最大のSEQのものを取得したいのですが よいSQLが思いつきません。 よい方法があればご教授ください。 よろしくお願いいたします。