お世話になっております。
以下の場合どのようにSQLを書くかで困っています。
どうかお願いします。
DBはOracle10gです。
テーブルA
区分 integer
コード integer(上記区分が0の場合は得意先のコード、1の場合は商品のコードが登録されています。)
得意先マスタ
コード integer
名称 varchar
商品マスタ
コード integer
名称 varchar
上記のテーブルAを読んで、
区分が0の場合は得意先マスタの名称
区分が1の場合は商品マスタの名称
をもってきたいのですがやり方がわかりません。
どうかよろしくお願いします。
No.3ベストアンサー
- 回答日時:
No.2です。
2個目のSQLを訂正します。
select テーブルA.区分, テーブルA.コード, 得意先マスタ.名称
from テーブルA
--left join 得意先マスタ on テーブルA.コード = 得意先マスタ.コード
inner join 得意先マスタ on テーブルA.コード = 得意先マスタ.コード
where テーブルA.区分 = 0
union all
select テーブルA.区分, テーブルA.コード, 商品マスタ.名称
from テーブルA
--left join 商品マスタ on テーブルA.コード = 商品マスタ.コード
inner join 商品マスタ on テーブルA.コード = 商品マスタ.コード
where テーブルA.区分 = 1;
ですね。確認不足で申し訳ありません。
No.4
- 回答日時:
別にUNIONせずとも、以下でよい気がします。
テーブルAは一回しか読みません。
select a.コード,case when a.区分 = 1 then b.名称 else c.名称 end as 名称
from テーブルA as a
left outer join 得意先マスタ as b
on a.区分 = 0
and a.コード = b.コード
left outer join 商品マスタ as c
on a.区分 = 1
and a.コード = c.コード
;
No.2
- 回答日時:
こんな感じでどうでしょうか。
select テーブルA.区分, テーブルA.コード, case when テーブルA.区分 = 0 then 得意先マスタ.名称 else 商品マスタ.名称 end 名称
from テーブルA
left join 得意先マスタ on テーブルA.コード = 得意先マスタ.コード and テーブルA.区分 = 0
left join 商品マスタ on テーブルA.コード = 商品マスタ.コード and テーブルA.区分 = 1;
もしくは
select テーブルA.区分, テーブルA.コード, 得意先マスタ.名称
from テーブルA
left join 得意先マスタ on テーブルA.コード = 得意先マスタ.コード
where テーブルA.区分 = 0
union all
select テーブルA.区分, テーブルA.コード, 商品マスタ.名称
from テーブルA
left join 商品マスタ on テーブルA.コード = 商品マスタ.コード
where テーブルA.区分 = 1;
union allの方が速そうな気がします。
No.1
- 回答日時:
分けてJOINしてからUNION ALLでくっつけるというのは。
select 得意先.* from
(select A.区分,A.コード,M.名称
from テーブルA A inner join 得意先マスタ M
on A.コード=M.コード
where A.区分 = 0 ) 得意先
union all
select 商品.* from
(select A.区分,A.コード,M.名称
from テーブルA A INNER JOIN 商品マスタ M
on A.コード=M.コード
where A.区分 = 1 ) 商品
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- その他(買い物・ショッピング) JANコードの登録について 1 2022/07/23 14:19
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- Excel(エクセル) ある文字を含む際に、値を返す数式についてです 5 2022/08/28 16:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sqlのwhere句で下記の条件にし...
-
orace SQL文のエラー(ORA-0092...
-
64bit端末でのOLEDB接続に関して
-
副問合せにLIKE文を使う方法は...
-
osqleditについて
-
CASLⅡ 文字データから数値デー...
-
バッチファイルで複数フォルダ...
-
oracleのimpdpでORA-39166
-
データベースのカラムの型がCHA...
-
SQL 2つのテーブルとSUBSTRING...
-
sqlplusで接続できない
-
オラクル試験でのクラムメディ...
-
Oracle で文字列からタイムスリ...
-
【SQL】IN句内のサブクエリが重...
-
棒読みちゃんが起動できないの...
-
sqlで質問です。 Aテーブルは店...
-
SQLの中上級者へのレベルアップ...
-
SELECTによる表の変換方法を教...
-
開発対象となるアプリケーショ...
-
質問です。 下記のテーブルとデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
副問合せにLIKE文を使う方法は...
-
batファイルでのSQL(oracle)...
-
oracleのimpdpでORA-39166
-
データベースのカラムの型がCHA...
-
64bit端末でのOLEDB接続に関して
-
ORA-14452について
-
osqleditについて
-
Oracleで文字列型の時間を引き...
-
バッチファイルで複数フォルダ...
-
orace SQL文のエラー(ORA-0092...
-
ワークテーブルって何?
-
SQLで今日の日付でWhereしたい
-
SQLについて教えて下さい。 主...
-
oracleの直接接続のクライアン...
-
SQL 2つのテーブルとSUBSTRING...
-
質問です。 下記のテーブルとデ...
-
続.ORACLEのSELECTのソートに...
-
SQLの中上級者へのレベルアップ...
-
テーブルやカラムの物理名のネ...
-
下記のsqlで取得されるレコード...
おすすめ情報