A 表 (id, name),B 表 (bid, name, pid 外鍵關聯 A.id)。需求:查詢 A 表每行,關聯 B 表所有 name 以逗號合併顯示。
SELECT a.*, r.data
FROM A a
LEFT JOIN (
SELECT pid,
data = STUFF((
SELECT ',' + name
FROM B t
WHERE t.pid = t1.pid
FOR XML PATH('')
), 1, 1, '')
FROM B t1
GROUP BY pid
) r ON a.id = r.pid;
FOR XML PATH(''):將多行結果串聯為無標籤 XML 片段(如 ,王五,張飛)。STUFF(str, 1, 1, ''):移除首字元逗號,得到 王五,張飛。LEFT JOIN:保留無子記錄的 A 表行(data 為 NULL)。SELECT a.id, a.name, STRING_AGG(b.name, ',') AS names
FROM A a
LEFT JOIN B b ON a.id = b.pid
GROUP BY a.id, a.name;
GROUP_CONCAT(b.name SEPARATOR ',')STRING_AGG(b.name, ',')