ソフトウェアエンジニアの日常の雑記

日々思ったことをまとめます

SQLでWhere句で2つのキーを指定する

普通なのかもだけど、SQLのwhere句で2つのキーを指定したくて、やったことなかったけどできたのでメモ。

point_table
|name|point|date|
|jiro|120|20111101|
|taro|100|20111001|
|jiro|110|20111001|
|taro|100|20110901|
|jiro|90|20110901|
|taro|110|20110801|
|jiro|80|20110801|

age_table
|name|age|date|
|taro|20|20111001|
|jiro|20|20111001|
|taro|19|20110901|
|jiro|20|20110901|
|taro|19|20110801|
|jiro|19|20110801|

こんなテーブルがあって、taroとjiroの直近に受けたテストの時に何歳だったか知りたい場合こんなSQLになる。

select name,age from age_table where (name,date) in (select name,max(date) from point_table group by name )

テンプレート:select * from fizz where (a,b) in (select c,d from buzz)  

where句のinは、右辺も左辺も複数指定できる。
これ使ったおかげでこんがらがってたSQLが大幅にリファクタでき、さらに速くなった。