Sql 根据第三个表中的字段,将一个表中的多条记录合并到另一个表中的一个字段中
我有三张桌子:Sql 根据第三个表中的字段,将一个表中的多条记录合并到另一个表中的一个字段中,sql,Sql,我有三张桌子: Table 1: pid, name, address 1 Dale BLANK Table 2: pid, moid 1 12 Table 3: moid, address 12 123 Main 12 12 South 12 99 North 对于输出,我需要: Table 1: pid, name, address 1 Dawn 123 Mian,12 South,99 North
Table 1:
pid, name, address
1 Dale BLANK
Table 2:
pid, moid
1 12
Table 3:
moid, address
12 123 Main
12 12 South
12 99 North
对于输出,我需要:
Table 1:
pid, name, address
1 Dawn 123 Mian,12 South,99 North
如何将表3中的多个地址合并到表1中的一个地址字段中,将两个表与表2中的信息链接起来?您可以通过连接来实现这一点:
select table1.pid, table1.name,
group_concat(table3.address, ', ')
from table2 join
table1
on table2.pid = table1.pid join
table3
on table2.moid = table3.moid
gorup by table1.pid
并非所有数据库中都存在函数
group\u concat
。其他字符串聚合函数有listag
和ws_concat
。希望您没有使用SQL Server,因为这里的字符串连接比较困难。您没有指定要使用的RDBMS。在MySQL中,您可以使用:
看
编辑#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);
看
如果您使用的是Oracle 11g+,则可以使用以下功能:
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 Server中,可以使用以下命令获得结果:
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
| PID | NAME | ADDRESS |
-------------------------------------------
| 1 | Dale | 12 South,99 North,123 Main |
看
所有这些都会产生以下结果:
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
| PID | NAME | ADDRESS |
-------------------------------------------
| 1 | Dale | 12 South,99 North,123 Main |
你使用的是什么样的RDBMS?看起来你应该考虑使用一个数据透视表——这取决于你的RDBMS。如果不受支持,也许函数可以提供类似的功能。@DavidBurke请接受我使用mySQL的最佳答案。很抱歉没提那件事。在我最初的问题中:“如何将表3中的多个地址合并到表1中的一个地址字段中,并将两个表与表2中的信息链接起来?”我想合并表3中的多个地址,并将结果放入表1中的地址字段中。你给我的很好,但它是一个Select语句,而不是Update语句。我真讨厌mySQL。有人可以将上面的mySQL语句转换为UPDATE语句,将该语句的结果插入表1的地址字段中吗。thx@DavidBurke请参见我的编辑,我已更新了语法以包含
UPDATE
语句。