質問: お世話になります。異なるテーブルにあるデータを一つのテーブルにあるデータかのように呼び出したいと思っています。 イメージ的には以下のようなテーブルがあります。 (例ですので実際のテーブル構成とは違います) dog(テーブル) no dog_name dog_img dog_setsumei 1 柴犬 shiba.jpg 柴犬は日本の犬で・・・ 2 チワワ chiwawa.jpg 小型犬として人気のあるチワワは・・・ 3 プードル purdol.jpg 古くからヨーロッパで広くみられ・・・ cat(テーブル) no cat_name cat_setsumei cat_tokuchou 1 三毛猫 日本猫の代表・・・ 三色の毛を持つ 2 サイベリアン ロシア土着猫で・・・ 毛の長い猫 3 スフィンクス 突然変異によって・・・ 毛が無い これら上記のようにカラム名の違うテーブル、かつ構成の違うテーブルにあるデータを同一テーブルから呼出したいと考えているのですが、考えた末出てきた案が、下記のように呼び出すためだけのテーブルを用意したらどうか?と考えました。 view(テーブル) no type animal_no name 1 dog 1 柴犬 2 cat 1 三毛猫 3 cat 3 スフィンクス 4 dog 2 チワワ ※typeは、どちらのテーブルを呼び出すか?であり、また、animail_noは各テーブルのnoと紐づいたものです。 上記テーブルのように、表示用にと別テーブルを用意しようと考えたのは、表示順を任意で変えたいため、別テーブルにしようと考えたわけですが、しかし、どのようなSQLにすれば良いのか?が分からず、また他にいい方法があればアドバイスを頂ければと考え投稿いたしました。 お忙しい中恐縮ですが、アドバイス頂ければ幸いです。 よろしくお願いいたします。
回答: unionを使うと概ね期待通りの結果が得られます。 疑似的な連番はMySQLだと変数が必要そうなので、付けていません。 あまり件数の多いテーブルなどに使うときは検討が必要です。 ``` select * from (select 'dog' as type ,no as animal_no ,dog_name as name from dog union all select 'cat' as type ,no as animal_no ,cat_name as name from cat ) ``` 今回は重複がないようなので、union allを使っています。 unionだと仮に重複があっても1行しか出ません。