• ベストアンサー

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

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 田辺先輩 どうか、よろしくお願いします。

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答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に存在しないデータを取得します。

php4
質問者

お礼

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

その他の回答 (1)

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

こういうやり方でもよいかも 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)

php4
質問者

お礼

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

関連するQ&A