您沒有指定您正在使用的RDBMS。在MySQL中,你可以使用GROUP_CONCAT()
:
select t1.pid,
t1.name,
group_concat(t3.address) Address
from table1 t1
left join table2 t2
on t1.pid = t2.pid
left join table3 t3
on t2.moid = t3.moid
group by t1.pid, t1.name
見SQL Fiddle with Demo
編輯#1,如果你想UPDATE
表這個結果,那麼UPDATE
聲明將是這樣的:
update table1 t1
set address = (SELECT group_concat(t3.address)
FROM table2 t2
left join table3 t3
on t2.moid = t3.moid
where t1.pid = t2.pid
group by t1.pid, t1.name);
見SQL Fiddle with Demo
如果喲u的使用Oracle 11g +,那麼你可以使用
ListAgg()
功能:
select t1.pid,
t1.name,
listagg(t3.address, ', ') WITHIN GROUP (ORDER BY t1.pid) Address
from table1 t1
left join table2 t2
on t1.pid = t2.pid
left join table3 t3
on t2.moid = t3.moid
group by t1.pid, t1.name
見SQL Fiddle with Demo
在SQL Server,你可以使用FOR XML PATH
得到結果:
select t1.pid,
t1.name,
STUFF((SELECT DISTINCT ', '+ t3.address
FROM table3 t3
LEFT JOIN table2 t2
ON t2.moid = t3.moid
WHERE t1.pid = t2.pid
FOR XML PATH('')), 1, 1, '') Address
from table1 t1
group by t1.pid, t1.name
見
SQL Fiddle with Demo
所有這些產生的結果:
| PID | NAME | ADDRESS |
-------------------------------------------
| 1 | Dale | 12 South,99 North,123 Main |
你使用的是什麼rdbms? – Taryn
看起來你應該考慮使用一個PIVOT表 - 這取決於你的RDBMS。如果不支持,也許一個函數可以提供類似的功能。 – sgeddes
@DavidBurke請接受最好的答案 – veritas