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
次の修正が発生したときに、自分に回ってこないよう祈ろう・・・