SQL文中で全角文字を使うなと言われたので、ORACLEでJOIN句の条件式をCASE文で分岐させる

投稿日:2017-07-28

JOINの条件式にCase文を入れる
http://blog.goo.ne.jp/ilikehobby/e/80b471f96f6d693b6c5df75f18591c0e

SQL文中で全角文字を使うなと言われたので、四苦八苦w

こんなデータに対して、

ID name
1
2
3

「あ」を「か」に、「い」を「き」に・・・って表示を変えたかった。

ID name
1
2
3

ただ、これだけなら、ゴリゴリとCASE文使って書けば良くね?って話だった。
だから、力技でSQLを書いたw

tableBはこんな感じのデータが格納されてるとして、

ID name
1
2
3
select 
  tableA.ID
  ,case when tableB.name = 'あ' then 'か'
       when tableB.name = 'い' then 'き'
            :
       else to_char(tableB.name)
       end
from
  tableA
  left join tableB
    on tableA.ID = tableB.ID

 

こんな感じで、「あ」を「か」に、「い」を「き」に・・・って表示を変えたかった。

ただ、この「あ」とか「か」に相当するものは、ユーザー状況で変化しうる内容で、一定ではないし、そもそもSQL文中に全角文字を指定するとは何事か!!って全否定された訳w

困ったぞ・・・

ということで、調べてたら、どうもJOIN句でもcase文による分岐が使えるみたい。
なので、・・・

select 
  tableA.ID
  ,tableB.name
from
  tableA
  left join tableB
    on case when tableA.ID = 1 then 6
       case when tableA.ID = 2 then 7
           :
       end tableA.ID
        = tableB.ID

こうした。

まぁ、この例だと、単にIDの数に5を足せば目的は達成出来るんだけどねw

今回は、そんな単純なルールじゃなくて、条件を手動で記載せざるを得なかった・・・

 

ただ、分かってて使うか、コメントを残しておかないと、後で分からなくなりそう。

通常の結合であれば、主キーだったりの結合で、基本的には同一のキーに対応するデータが取得できるけど、これをやると、後で結果だけ見たときに、IDに対して明らかに異なる結果が返ってくるので・・・

自分もだけど、まぁ、コメント残しても読まないやつは読まないから、最終的にはSQL自体を調査することになりますがw

次の修正が発生したときに、自分に回ってこないよう祈ろう・・・







-ORACLE, PC
-, ,


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

[ORACLE]Oracle 11g XEの文字コードの変更

Oracle 11g XE を普通にインストールするとUFT-8になりますが、場合に寄っちゃSJISで設定しなきゃいけないときもあるので、その手順。 SJISのdumpを渡される 以前、疑問に思ったの …

SkypeでSMSを送信するために、そこまで必要じゃ無いけど、ガラケーでSMS使うのが嫌だったので、Skypeクレジット登録してSMS送信出来るようにしてみた。

上司に連絡を取るときに、電話に出れない時のほうが多いので、SMSを使わなくてはいけない。 いや、いけないことは無いんだけど、即時性を求めるならSMSになる。 Skypetとかもインストールはされてるか …

[C#]リストをカンマ区切りの文字列で出力する

リストの項目をカンマ区切りで出力したい 卵が先か鶏が先か~って話じゃないんですが、リストで出力した内容をカンマ区切りのデータにする必要が出てきたので、調べました。 List<string> …

Oracle Database Bronzeの勉強を始めました。

業務でOracleを使ってます。 DBへの接続と簡単なSQLの確認ぐらいだったら、SQLDeveloperとかのツールを使わずにSQLPlusだけで済ませちゃう人も多いのかな? あとは、SQLのバッチ …

すかいらーくグループでdocomo wi-fiが提供終了となるので、代替手段を検討してみた

田舎ということもあり、ファミレスの選択肢が非常に少ないのもありますが、割とガストは利用します。 が、2017年06月01日に悲報が・・・ http://www.skylark.co.jp/compan …


カテゴリー