つかえるSQL

仕事で詳細設計作成中にハケーンしたのでメモ。
知ってる人なら誰でも知ってるはず…なんで知らんかったんやろ…orz

ちなみにDBはOracle10g


複数のフィールドに対して組み合わせの条件指定

SELECT
  *
FROM
  TABLE table1
WHERE
 (table2.field1, table2.field2) in (SELECT table2.field1, MAX(table2.field2) FROM TABLE table2 GROUP BY table2.field1)

一見あんまり使わない?
条件が固定の場合はAND条件で対応できるけど、複数の組み合わせの条件をするときなどに使える。
サブクエリと組み合わせて使うはず。


TABLEというテーブルがあるマスタテーブルの明細テーブルだとする。
 field1は親テーブルと結合するキーフィールド
 field2は明細の連番フィールド


この時にマスタ毎の最大連番の明細情報を全て取得するというような時に使える。


たまたま使う機会があったんだけど…使う人は普通によく使うはず。
ってか常識レベルかもww


ちなみにHibernateのHQLでも問題なく使用できるみたい。


あと、外側のクエリで使用するテーブルとサブクエリで使用するテーブルを結合する手法も結構使えそうたっだのでまた後日言及してみる。


しかし、HibernateみたいなO/RマッパーつかってるとSQL弱くなってるなー。
IBatis使ってUNIONとか使いまくってたころが懐かしい…(半年前だけどww)

VBのときなんかソースにベタ書きでゴリゴリ書きまくってたなww