0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

複数のマスタについて、一つのSQLで一括でコード→名称の変換がしたい。

0
Posted at

結論: DUALを使用した

ちょっと悩んだポイントとしては、それぞれが独立なマスタなためどれか一つを主としてJOINする方式では主としたテーブルに対するWHERE句が思い浮かばなかった。
存在しないと全体の結果が空になる。

SELECT HOGEHOGE_MEI, HUGOHUGO_MEI
FROM M_HOGEHOGE
LEFT JOIN M_HUGOHUGO ON HUGOHUGO_CODE = :HUGOHUGO_Code
WHERE HOGEHOGE_CODE = :HOGEHOGE_Code

色々整形しているうちに、結合したマスタの数だけ行数が出てきたり(n行目はテーブルnの名称以外はNULL)とうまくいかない。

常に1行の結果を返すというDUALを使い、そこにそれぞれのマスタをJOINする方式に変更。

SELECT
HOGEHOGE_MEI
, HUGOHUGO_MEI
, HOGAHOGA_MEI
, HUGIHUGI_MEI
, HOGUHOGU_MEI
FROM (
SELECT 1
, T1.HOGEHOGE_MEI
, T2.HUGOHUGO_MEI
, T3.HOGAHOGA_MEI
, T4.HUGIHUGI_MEI
, T5.HOGUHOGU_MEI
FROM DUAL
LEFT JOIN M_HOGEHOGE T1 ON T1.HOGEHOGE_CODE = :HOGEHOGE_Code
LEFT JOIN M_HUGOHUGO T2 ON T2.HUGOHUGO_CODE = :HUGOHUGO_Code
LEFT JOIN M_HOGAHOGA T3 ON T3.HOGAHOGA_ID = :HOGAHOGA_Id
LEFT JOIN M_HUGIHUGI T4 ON T4.HUGIHUGI_ID = :HUGIHUGI_Id
LEFT JOIN M_HOGUHOGU T5 ON T5.HOGUHOGU_ID = :HOGUHOGU_Id

望んだとおりの出力が得られた。
存在しないコードのもののみNULLとなり、一行で全部帰ってくる。

もっといい方法とか、DUALなしでもうまくやる方法とありそう・・・。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?