Sql 查询,将左外连接的结果分组到主 table 的单个 cell/field
Sql query , grouping result from left outer join to a single cell/field of main table
假设我有以下 3 tables :
IDUser Name Surname
1 Lucas Wurth
2 John Charson
3 Erik Drown
IDUser IDLocation
1 1
1 2
2 1
3 2
IDLocation Name
1 Rome
2 Milan
一个用户 Table ,一个位置 table 和一个 table 来为我们的用户分配一个位置。
我想从我的数据库中提取所有用户,并有一个特定的列,其中所有分配的位置都报告如下:
IDUser Name Surname Locations
1 Lucas Wurth Rome - Milan
2 John Charson Rome
3 Erik Drown Milan
请注意,用户 1 同时分配了罗马和米兰
目前我的查询:
SELECT
U.IDUser,
U.Name,
U.Surname,
UL.Name AS LocationName
FROM Users U
LEFT OUTER JOIN UserLocation UL ON
UL.IDUser = U.IDUser
LEFT OUTER JOIN Location L ON
UL.IDLocation = L.IDLocation
显然总共返回了 4 条记录而不是 3 条记录,是否可以使用聚合函数 group by 来实现?如果可以,我应该怎么做?
如果您使用的是 SqlServer,则可以使用 STRING_AGG :
SELECT
U.IDUser,
U.Name,
U.Surname,
STRING_AGG(UL.Name, ' - ') AS Locations
FROM Users U
LEFT OUTER JOIN UserLocation UL
ON UL.IDUser = U.IDUser
LEFT OUTER JOIN Location L
ON UL.IDLocation = L.IDLocation
GROUP BY U.IDUser, U.Name, U.Surname
假设我有以下 3 tables :
IDUser Name Surname
1 Lucas Wurth
2 John Charson
3 Erik Drown
IDUser IDLocation
1 1
1 2
2 1
3 2
IDLocation Name
1 Rome
2 Milan
一个用户 Table ,一个位置 table 和一个 table 来为我们的用户分配一个位置。 我想从我的数据库中提取所有用户,并有一个特定的列,其中所有分配的位置都报告如下:
IDUser Name Surname Locations
1 Lucas Wurth Rome - Milan
2 John Charson Rome
3 Erik Drown Milan
请注意,用户 1 同时分配了罗马和米兰
目前我的查询:
SELECT
U.IDUser,
U.Name,
U.Surname,
UL.Name AS LocationName
FROM Users U
LEFT OUTER JOIN UserLocation UL ON
UL.IDUser = U.IDUser
LEFT OUTER JOIN Location L ON
UL.IDLocation = L.IDLocation
显然总共返回了 4 条记录而不是 3 条记录,是否可以使用聚合函数 group by 来实现?如果可以,我应该怎么做?
如果您使用的是 SqlServer,则可以使用 STRING_AGG :
SELECT
U.IDUser,
U.Name,
U.Surname,
STRING_AGG(UL.Name, ' - ') AS Locations
FROM Users U
LEFT OUTER JOIN UserLocation UL
ON UL.IDUser = U.IDUser
LEFT OUTER JOIN Location L
ON UL.IDLocation = L.IDLocation
GROUP BY U.IDUser, U.Name, U.Surname