Mr.Tです、こんにちは。
Ognacさんのエントリで共通テーブル式(CTE)のことをあげたら、こんなコメントが・・・
http://blogs.wankuma.com/ognac/archive/2009/09/10/181052.aspx#181071
正直、どこをどう説明したらいいのかわかりませんが、もうめちゃくちゃ安易に使ってます。
#シビアなパフォーマンスを比較的求められないケースがほとんどなので、Indexは?とかそういうのは
#今のところあまり問題になってません。
例えば、普通に二つのテーブルを外部結合してるSQLがあったとします。
X名簿、Y名簿とも、ID,名前,苗字というフィールドのテーブルとして
select T1.[名前],T1.[苗字] from [X名簿] T1
left join [Y名簿] T2
on T1.ID = T2.ID
where T1.ID<100
これに、Y名簿のIDが200未満という条件がついていたとすると、そのままかけば
select T1.[名前],T1.[苗字],T2.[結婚前苗字] from [X名簿] T1
left join (select * from [Y名簿] where ID<200) T2
on T1.ID = T2.ID
where ID<100
こんな風になりますよね。
私は、(select * from [Y名簿] where ID<200)の部分が長くなるのが非常に見難く感じるので、ここをざくっと
こうしちゃいます。
with [Y名簿のID200未満] as (
select * from [Y名簿] where ID<200
)
select T1.[名前],T1.[苗字] from [X名簿] T1
left join [Y名簿のID200未満] T2
on T1.ID = T2.ID
where T1.ID<100
withでくくるのは、複数かけるので、
with テーブルA as ()
.テーブルB as ()
,・・・
select * from テーブルA,テーブルB
みたいに、やってますね。
SQLは大きくなるほど、ここで抽出してるのはどういうデータなのかを忘れちゃうので、
こうやって名前付けて出しちゃうのは見た目で結構わかりやすいと個人的にはおもってます。
他の人、CTEってどういうときにつかってるんだろ。