摘要:【TSQL】子查詢VS CTE 產品結構表 (BOM)多階查詢? HOW....
前言:此技術僅適用SQL2005以上版本
Lewis Yang 老師在上課的時候回答了我這個小小的問題^^
但是一語打點醒夢中人!!!!!!
其實在問問題之前我曾經試過自己先把全部子件都展開,
但是資料量整個大爆炸阿阿阿XDDD
EXCEL每開必當...>"<
join語法很明顯是不行的
迴圈...則是根本沒有停止點= ="
子查詢。。。
什麼是CTE?
一般資料表運算式CTE (Common Table Expression)
(以下來自KingKong Bruce記事 大大整理的重點^^)
http://blog.kkbruce.net/2011/01/t-sql-common-table-expression-cte.html#.UU1upxeotvA
可以把CTE當成"Temp View"
如果在Store Procedure使用CTE,會造成每次執行都會re-compiler,效能低落
資料集未以Table存放於Database時,適合用CTE
View通常用來分解大型查詢,如果只用一次,那View不是好辦法
子查詢只能從所在的"陳述式"存取,如果有多個相同的子查詢,必須含重覆程式碼,難閱讀及維護
CTE能在同批次下,重覆使用(像View一樣)
CTE只能用於其後第一個陳述式(Select, Insert, Delete, Update),此陳述式可多次取用CTE
CTE後面可接另一個CTE,使用逗號(,)
實際檢查
黑暗執行緒大大
http://blog.darkthread.net/post-2007-05-23-sql-2005-t-sql-enhancement-common-table-expression.aspx
MSDN
http://msdn.microsoft.com/zh-tw/magazine/cc163346.aspx