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

テーブル結合方法について

MySQL5.1で、Table a ,Table b から、Table cのように取り出したいのですが、 SQLでSELECTする方法がわかりません。 Table b優先だけど、Table aにしかデータがない場合もあるといった感じです。 Table a No  Name 1 加藤 2 佐藤 3 田中 Table b No Name 2 佐藤先輩 4 田辺先輩 Table c No Name 1 加藤 2 佐藤先輩 3 田中 4 田辺先輩 どうか、よろしくお願いします。

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

  • MySQL
  • 回答数2
  • ありがとう数3

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

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

こんな感じでどうでしょうか。 select b.no, b.name from b union all select a.no, a.name from a where not exists(select * from b where a.no = b.no) order by no; bの全件と、aのうちbに存在しないデータを取得します。

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

質問者からのお礼

union all高速ですね。 group by noで何とか目的が達成できました。 ありがとうございます。

その他の回答 (1)

  • 回答No.2
  • yambejp
  • ベストアンサー率51% (3827/7415)

こういうやり方でもよいかも select No,coalesce(b.Name,a.Name) as Name from a left join b using(No) union select No,coalesce(b.Name,a.Name) as Name from a right join b using(No)

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

質問者からのお礼

今回は、データ量的に重くて厳しかったですが、 union前に、right joinなど発想できていなかったので為になりました。 又、join + coalesce()の手法も、いつか使う時がありそうです。 ありがとうございました。

関連するQ&A

  • テーブルの結合・・・

    教室テーブル id, class 1, A組 2, B組 3, C組 生徒テーブル id, name 1, 佐藤 1, 山田 2, 鈴木 3, 田中 3, 後藤 3, 加藤 という二つのテーブルがあります。 これらをLEFT JOINで結合したのですが。 A組, 佐藤 A組, 山田 B組, 鈴木 C組, 田中 C組, 後藤 C組, 加藤 となってしまいます。 これを同じ教室名でまとめて、 A組, 佐藤 山田 B組, 鈴木 C組, 田中 後藤 加藤 というように表示したいのです。 できればクエリだけで解決したいのですが・・・ よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Mysqlで複数テーブルの参照

    Mysqlで複数テーブルの参照 お世話になります。Mysqlについて質問させてください。 現在、それぞれnameとdateとflagの3フィールドをもつテーブルが、2つあります。 もともと別の用途で準備したものなのですが、 2つのテーブルのflagを参照して、1のものだけdate順に並べることが出来るでしょうか? ■テーブル1 -----------------------------  name |  date  |flag| -----------------------------  田中 | 2010-06-01 | 1 -----------------------------  山田 | 2010-09-01 | 1 -----------------------------  田辺 | 2010-10-01 | 2 -----------------------------  田所 | 2010-11-01 | 2 ----------------------------- ■テーブル2 -----------------------------  name |  date  |flag| -----------------------------  加藤 | 2010-10-01 | 1 -----------------------------  佐藤 | 2010-07-01 | 1 -----------------------------  織田 | 2010-12-01 | 2 -----------------------------  斎藤 | 2010-01-01 | 2 ----------------------------- ■求める結果 -----------------------------  name |  date  |flag| -----------------------------  田中 | 2010-06-01 | 1 -----------------------------  佐藤 | 2010-07-01 | 1 -----------------------------  山田 | 2010-09-01 | 1 -----------------------------  加藤 | 2010-10-01 | 1 ----------------------------- 具体的なSQL文でなくとも構いません。参考になるような情報、サイトをご存じでしたら、教えてください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • テーブルを結合

    テーブルの結合に関して質問します。 ネットなどでinner joinを使った複数のテーブル結合が参考として 書いてあったのですが(3つまで), 4つテーブルを結合する事は 出来るのでしょうか? A,B,CテーブルにはID,NAMEがあります。 DテーブルにはA,B,CテーブルのIDがあります。 参考サイトを見て3つのテーブルを結合するSQLが以下になります。 SELECT a.name, b.name, c.name FROM a INNER JOIN (b INNER JOIN c ON b.id = c.id) ON a.id = c.id よろしければアドバイスお願いします。

  • 複数テーブルからのカウント集計

    初めて、投稿させて頂きます。 カルテテーブルに登録されたデータより、スタッフごとにどのサービスを何回対応したかを出力したいのですが、経験が浅く考え込んでいます。 また、日付の制限も指定したいです。 何卒、アドバイスをお願い致します。 MySQL 4.0.24-standardを使用しています。 カルテテーブル(chart_table) --------------------------------------- staff | date | service1 | service2 | service3 | service4 | 1 2007-01-27 1 2 0 0 3 2007-02-07 0 0 3 4 2 2007-03-04 1 0 3 4 スタッフテーブル(staff_table) --------------------------------------- no | id | 1 佐藤 2 鈴木 3 田中 サービステーブル(service_table) --------------------------------------- no | name | 1 サービスA 2 サービスB 3 サービスC 4 サービスD 結果(2007-01 ~ 2007-03) ---------------------------------------       佐藤 | 鈴木 | 田中 | サービスA 1 1 0 サービスB 1 0 0 サービスC 0 1 1 サービスD 0 1 1

    • ベストアンサー
    • MySQL
  • 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が思いつきません。 よい方法があればご教授ください。 よろしくお願いいたします。

  • サブクエリなしで2つのテーブルを集計する方法

    テーブルA id|cnt|name 1 2 田中さん 2 5 鈴木さん テーブルB id|cnt|name 1 4 田中さん 2 4 鈴木さん サブクエリを使用せず、上記2つのテーブルを集計し、 下記のように出力できるSQLはありますでしょうか? ■期待する総合ランキング結果 id|cnt|name 2 9 鈴木さん 1 4 田中さん P.S まだまだ、安価なレンタルサーバはMySQLは4.0が多く苦労します・・

    • ベストアンサー
    • MySQL
  • テーブル結合

    度々お世話になっています。 Mysqlのテーブル結合したいと思ってます。 テーブル構成は以下のとおりですのでご参照ください。 ■テーブルA id | name 1 | bind 2 | samba 3 | apache ■テーブルB id | detail 3 | test 3 | test 1 | test ■結合結果 id | count 1 | 1 2 | 0 3 | 2 テーブルA,Bはidコラムで紐づいています。 この際、テーブルBのidごとにレコード数を出力したいのですが、 どういったSQLを流せば良いでしょうか。 ご教示願います。

    • ベストアンサー
    • MySQL
  • mysql と php で、2テーブル結合の検索!

    mysql と php を勉強しはじめで、解からないので、どなたか教えてください! 2テーブルあります。( 例 ’name’ と ’jusyo’ テーブルです。) ’name’テーブルは、NO int、IC_NO char(5)、NAME char(18)、 ・・・・・です。 ’jusyo’テーブルは、NO int、NAME_KANA char(30)、TEL char(6)、JUSYO char(50)、 ・・・・です。 この2テーブルを、《NO int、》で、左結合(レフトジョイン)させます。 テキスト入力フィールド、があり、検索ボタンで検索させようと思っています。 テキスト入力フィールドには、IC_NO を入力し、’jusyo’テーブルの、NAME_KANA TEL JUSYO・・・ を表示させたいと思っています。 <?php extract($_POST); echo " <form action=\"kensaku2.php\" method=\"post\" > <p>検索番号 : <input type=\"text\" name=\"nam\" value=\"$nam\" size=\"10\">   <input type=\"submit\" value=\"検索\"></p>\n </form> "; if($nam<>''){ mysql_connect('localhost','root','******'); mysql_select_db('データベース名'); $sql= "select * from name left join jusho on NO=NO"; $sql= "select * from name where IC_NO like '%$nam%'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>\n"; } else { while($row = mysql_fetch_array($result)){ echo "詳細情報"; echo "<br />\n"; echo "<br />\n"; echo "インター名 : "; echo $row["NAME_KANA"]; echo "     "; echo "<p>";               ↓ としてますが、NAME_KANAが表示されません、どこが間違っていますか? 考え方がおかしいのでしょうか?

  • データの無いテーブルと結合してデータ抽出

    以下のテーブルを使用してデータを抽出したいのですが、データが抽出できません。 名称テーブル -------------------- ID | NAME | -------------------- 0   AA 1   BB 2   EE 3   FF 履歴テーブル -------------------- ID | DAY | OLDNAME -------------------- 2   2004   CC 3   2004   DD 結果取得したいデータ -------------------- ID | NAME | OLDNAME -------------------- 0   AA =現在のSQL= SELECT A.ID, A.NAME, B.OLDNAME FROM 名称 A , 履歴 B WHERE A.ID = B.ID(+) AND A.ID=0 AND B.DAY =  (SELECT MAX(C.DAY)  FROM 履歴 C  WHERE  A.ID = C.ID(+)) 履歴テーブルには名称テーブルの履歴があります。 履歴にデータが無くても名称データを取得したいのですが、こういった場合はどのようなSQLを作ればいいのでしょうか。

  • 複数テーブルを結合するには?

    OS:WINDOWSXP SP2 ORACLE:Oracle9i Enterprise Edition Release 9.2.0.1.0 A, B, Cというテーブルがあるとします。 それぞれのテーブルには XXカラムと YYカラムがあるとします。 2つのテーブルを結合させるには、以下のSQL文を記述すれば良いと考えています。 SELECT A.*,B.* FROM A JOIN B ON A.XX = B.XX 3つのテーブルを結合するには、以下のSQL文を記述しています。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX JOIN C ON A.XX = C.XX 但し、この記述方法でいきますと、Cテーブルを右側外部結合に指定した場合のみ、 ORA-00904 "C" 無効な識別子です。 というエラーメッセージが表示されます。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX RIGHT OUTER JOIN C (←LEFT OUTER、FULL OUTER)なら通ります) ON A.XX = C.XX 何故、右側外部結合のみ不正となるのか不明であり、解決策が見つかりません。 複数のテーブルを結合する為のSQL文の記述方法を教えて頂けますでしょうか?