今、「T_メニュー一覧」と「T_新メニュー一覧」という2つのテーブルがあります。
――――
select 商品名,店舗ID,単価
from T_メニュー一覧
union all
select 商品名,店舗ID,単価
from T_新メニュー一覧
――――
によって、1つのテーブルにまとめあげることはできるのですが。
https://f.hatena.ne.jp/moon-fondu/20210707162744
実は「T_メニュー一覧」の方にあります「メニューID」という列も表示させたいのです。
「T_新メニュー一覧」の方には、「メニューID」という列はなく、新規に作成することもできません。
「T_新メニュー一覧」に列を追加することなく、UNION ALLとは別に「T_メニュー一覧」の方にあります「メニューID」列を表示させることは、できないでしょうか。
自分の方で調べましたころ、
異なる定義のテーブルでUNION ALLするには?|teratail
https://teratail.com/questions/130157
を参考にし、「サブクエリを使えばいいのかな?」と思いまして。
――――
select a.商品名,a.店舗ID,a.単価,a.メニューID
from(
select 商品名,店舗ID,単価
from T_メニュー一覧
union all
select 商品名,店舗ID,単価
from T_新メニュー一覧) a
――――
を、実行してみたのですが。
しかしこちらの画像 https://f.hatena.ne.jp/moon-fondu/20210707163040 にありますように、「a.メニューID」のパラメーターの入力を求めるダイアログが出てきしまいます。
何かいい方法がありましたらお教えいただけますと有り難いです。
Accessのファイルはこちらになります。
よろしくお願い致します。
質問で書かれていることをやりたいなら、こんな感じです。
select 商品名,店舗ID,単価,メニューID from T_メニュー一覧 union all select 商品名,店舗ID,単価,-1 as メニューID from T_新メニュー一覧
カラムが足りない方のテーブルを select する方で、ダミーの値を補ってあげる。
例では -1 としましたけれど、空文字列 ("") でも、Null でも、"ダミーメニューID" みたいな文字列でもお好きなものを指定してください。
とは言え、列数すら違うテーブルを union で結合するのは地雷でしかないような気はします...
実物は、どんなやつなんだろう...
あと、teratail の回答にもありましたけど、かなり乱暴な結合なので、どっちのテーブルから引っこ抜いたのかの目印は入れておくべきだろうとは思います。
質問で書かれていることをやりたいなら、こんな感じです。
select 商品名,店舗ID,単価,メニューID from T_メニュー一覧 union all select 商品名,店舗ID,単価,-1 as メニューID from T_新メニュー一覧
カラムが足りない方のテーブルを select する方で、ダミーの値を補ってあげる。
例では -1 としましたけれど、空文字列 ("") でも、Null でも、"ダミーメニューID" みたいな文字列でもお好きなものを指定してください。
とは言え、列数すら違うテーブルを union で結合するのは地雷でしかないような気はします...
実物は、どんなやつなんだろう...
あと、teratail の回答にもありましたけど、かなり乱暴な結合なので、どっちのテーブルから引っこ抜いたのかの目印は入れておくべきだろうとは思います。
カラム名が重複するテーブルを join してるので、select するカラム名には
テーブルの指定が必要です。
select T_メニュー一覧.商品名,T_メニュー一覧.店舗ID as TI,T_メニュー一覧.単価,メニューID from T_メニュー一覧 left join (select 商品名, 店舗ID as TI,単価 from T_新メニュー一覧) NM on T_メニュー一覧.店舗ID = NM.TI
あと、もうひとつ問題があって、on の NM.店舗ID がダメです。
select で as を使って名称を変えているので、NM.TI にする
必要があります。
うまくいきました!ありがとうございます(^^;)
「式の方が一致しない」と出てきましたが、デザインビューでデータ型を確認しましたら「数値型」になってないフィールドがありましたので、それを直したら問題なかったです。
selectするカラム、いつも悩むのですが、
――――――――――
select *
from T_メニュー一覧
left join
(select 商品名, 店舗ID as TI,単価
from T_新メニュー一覧) NM
on T_メニュー一覧.店舗ID = NM.TI
――――――――――
みたいに全部選ぶと、楽ですね!
一旦、全部選んでどの列が必要かを確認して、selectの箇所を書き換えようと思います。
カラム名が重複するテーブルを join してるので、select するカラム名には
テーブルの指定が必要です。
あと、もうひとつ問題があって、on の NM.店舗ID がダメです。
select で as を使って名称を変えているので、NM.TI にする
必要があります。
うまくいきました!ありがとうございます(^^;)
「式の方が一致しない」と出てきましたが、デザインビューでデータ型を確認しましたら「数値型」になってないフィールドがありましたので、それを直したら問題なかったです。
selectするカラム、いつも悩むのですが、
――――――――――
select *
from T_メニュー一覧
left join
(select 商品名, 店舗ID as TI,単価
from T_新メニュー一覧) NM
on T_メニュー一覧.店舗ID = NM.TI
――――――――――
みたいに全部選ぶと、楽ですね!
一旦、全部選んでどの列が必要かを確認して、selectの箇所を書き換えようと思います。