採用一般資料表運算式(Common Table Expressions, CTE)做為資料查詢參考
前言
有時在進行資料查詢,會先將特定資料取出作為主要資料查詢的比對目標,此時可以採用一般資料表運算式(Common Table Expressions, CTE)做為資料查詢參考之用,亦可讓單一陳述式共享CTE資料,以下介紹。
實際演練
Lang資料表之測試資料如下,存放各語系下需顯示的文字
以下的行為很簡單,把資料透過 CTE 拆分在 LangTw 與 LangUs 兩個資料集,最後在 UNION 起來合併回一個資料集,夠無聊了吧 ! 此篇把重點放在如何使用 CTE 上,至於撈資料的目的就不是這麼重要囉。
- 以
;WITH
開頭,因 CTE 需要以分號隔開前段語法,習慣直接給予分號避免此問題發生。 - 定義資料取得 Query 語句,並給予名稱(LangTw)及欄位(a, b, c)別名,欄位部分可略。
- 可以具有多組 CTE 資料,但需要使用逗號區隔。
- 直接使用 CTE 的SQL語句 (必須包含 select , insert, update, delete) ,使用範圍為此單一陳述式內。
使用以下語法查出來的資料如預期般呈現
;WITH
LangTw(a,b,c) AS
(
SELECT l.MasterLangId, l.LangType, l.ShowText
FROM Lang l where l.LangType='zh-TW'
),
LangUs(d,e,f) AS
(
SELECT l.MasterLangId, l.LangType, l.ShowText
FROM Lang l where l.LangType='en-US'
)
SELECT a, b, c FROM LangTw
UNION ALL
SELECT d, e, f FROM LangUs;
CTE 還有一個特點是可以自我參考,透過遞迴 CTE 針對樹狀結構等資料集合進行撈取,處理的效能會比較好,有興趣的朋友可以參考筆者 [Entity Framework][LINQ] 使用LINQ尋訪關聯性樹狀資料 文章下方範例。
參考資料
一般資料表運算式(Common Table Expressions, CTE)
希望此篇文章可以幫助到需要的人
若內容有誤或有其他建議請不吝留言給筆者喔 !