外表看似簡單難度卻異於常人的 T - SQL 這次又有什麼新難題呢?
就讓我們看下去
首先我有三張表 兩張 List 表 一張 Mapping 表
原先 Hyperlink 跟 Tag 的對應關係為多對多 但是為了符合正規化 拆成兩組 一對多的形式 非常常見
需求也還算合理 我想看到 每個 Hyperlink 對應的 TagName
但是我想要 不管有多少 TagName 都收錄於同一筆之中
各位看官如果沒有試過的話 不妨先自行嘗試一遍 如果輕易的就解開了 表示您已經是踢吸摳之神 值得瞻仰
就跟魔術一樣說穿了其實沒那麼難 主要需要 JOIN 跟 子查詢 這都不難想像
但是最難的應該就是這個合併成一行的 TagName
定番 估狗了一下 發現 FOR XML 子句
神人文:http://www.dotblogs.com.tw/chhuang/archive/2008/03/19/1926.aspx
簡單來說就是把查詢結果變成一行 XML 來表示
目前是針對單一比的合併 要跟 整張 Hyperlink 合併 就要借助子查詢了
但是身為具有偏執狂熱的PG 不可能允許 那個多餘的 逗點
使用 STUFF 函數 來搞定
備忘
SELECT Title, Url,
STUFF((
SELECT DISTINCT ',' + T.TagName FROM Hyperlink AS H
JOIN HyperlinkTag AS HT ON H.ID = HT.HyperlinkID
JOIN Tag AS T ON T.ID = HT.TagID
WHERE H.ID = Hyperlink.ID
FOR XML PATH('')
),1,1,'') AS 'Tags'
FROM Hyperlink
沒有留言:
張貼留言