»

with句再考(≒最高)

SQL Server — タグ: , — enjoji.yasujiro @ 12:01 AM

■最近自分も学習したのだけど、with句には複数設定することが可能らしい↓

with t1 as( /*@SQL鯖2005 */
select rowid= 1,isbn = 4492042997 union all
select rowid= 2,isbn = 4774135380
),t2 as(
select isbn = 4492042997,bknm = ‘出逢いの大学’,authorid= ‘p1′ union all
select isbn = 4774135380,bknm = ‘小さなニュースに火をつけて売る!’,authorid=’p2′
),t3 as(
select authorid=’p1′,authorname = ‘千葉智之’ union all
select authorid=’p2′,authorname = ‘松本拓也’
)

select rowid
, bookname = bknm
, isbncode = x.isbn
, author = authorname
from t1 x
left outer join t2 y
on x.isbn = y.isbn
left outer join t3 z
on y.authorid = z.authorid

※select文の結果↓


■あるいは複数あるwith句で最初のほうに設定したt1,t2,t3を利用してt4で再設定するというような雪だるま方式で記述することも可能↓

with t1 as( /*@SQL鯖2005 */
select rowid= 1,isbn = 4492042997 union all
select rowid= 2,isbn = 4774135380
),t2 as(
select isbn = 4492042997,bknm = ‘出逢いの大学’,authorid= ‘p1′ union all
select isbn = 4774135380,bknm = ‘小さなニュースに火をつけて売る!’,authorid=’p2′
),t3 as(
select authorid=’p1′,authorname = ‘千葉智之’ ,URL=’ttp://plaza.rakuten.co.jp/tomo2318/’
union all
select authorid=’p2′,authorname = ‘松本拓也’, URL=’ttp://ameblo.jp/hatarakanai/’
), t4 as(
select rowid
, bookname = bknm
, isbncode = x.isbn
, z.authorid
, author = authorname
, URL
from t1 x
left outer join t2 y
on x.isbn = y.isbn
left outer join t3 z
on y.authorid = z.authorid
)

select rowid
, bookname
, isbncode
, author = case when authorid = ‘p1′ then ‘ちばとも’
when authorid = ‘p2′ then ‘世田谷のプロデューサー’end
, blog = replace(URL,’ttp’,'http’)
from t4

※select文の結果↓

—-
上記の2点を踏まえると、例えばDeclare句で@変数を宣言して#一時テーブルにマスターテーブルのデータをInsertして@変数使ってごにょごにょ加工して最後に別途実テーブルにTrancate経由で#テーブルのデータを入れ込むというシーケンシャル処理的なストアドプロシージャとかも、with句のあるview1つの記述で代替可能(それがDBのパフォーマンス的に最適なのかは不明だけど)で、そういうストアドプロシージャとかDeclare句からも開放される(≒Declare句の@変数を直し忘れたとかストアドプロシージャをexecuteしないと最新データが生成されないといった利用時のデメリットが解消される)訳で、なかなかSQL Server2005も使い勝手がよくって大変結構なことだと思う。

0 Comments »

コメントはまだありません。

このコメント欄の RSS フィード TrackBack URI

コメントをどうぞ

This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2009 鎌倉橋日記 | powered by WordPress with Barecity