Return 1 列而非多行中用户的多个角色
Return multiple roles for user in 1 column not multiple rows
SQL 服务器
我正在尝试 return 1 行的用户包含他们的名字、姓氏、电子邮件等,并且他们的所有角色都包含在通过 UserRoles 连接的单独角色 table 中。
User -> UserRoles -> Role
------------- --------------- ------------
Email UserEmail Id
Firstname RoleId Name
Lastname
Phone
IsActive
declare @Email nvarchar(100);
set @Email = 'testemail@gmail.com'
SELECT [User].Email, Password, Username, Firstname, Lastname, Phone, IsActive, EmailVerified, IsBanned, BanStart, BanEnd, [Role].Name as Roles
FROM dbo.[User], [UserRole], [Role]
WHERE [User].Email = @Email AND UserRole.UserEmail = [User].Email AND UserRole.RoleId = Role.Id
Return
Email Username Firstname Lastname Phone IsActive EmailVerified IsBanned BanStart BanEnd Roles
testemail@gmail.com testemail@gmail.com daniel brownn 3199999999 1 0 0 NULL NULL Expert
testemail@gmail.com testemail@gmail.com daniel brownn 3199999999 1 0 0 NULL NULL User
不幸的是,对于具有 2 个角色的用户来说,此 return 是正确的信息,它 return 是 2 个单独的行。我的目标是在包含两个角色值的角色列中有 1 行 returned 用逗号分隔值。这可能吗?
谢谢!
您可以尝试使用JOIN
子句和STRING_AGG
方法。 Here 您可以找到此方法的文档。
您的查询结果如下:
SELECT
[User].Email,
Password,
Username,
Firstname,
Lastname,
Phone,
IsActive,
EmailVerified,
IsBanned,
BanStart,
BanEnd,
STRING_AGG([Role].Name, ', ') as Roles
FROM
dbo.[User]
JOIN [UserRole] ON [UserRole].UserEmail = [User].Email
LEFT JOIN [Role] ON [Role].Id = [UserRole].RoleId
GROUP BY
[User].Email,
Password,
Username,
Firstname,
Lastname,
Phone,
IsActive,
EmailVerified,
IsBanned,
BanStart,
BanEnd
注意 STRING_AGG
是一个 t-sql 方法,但是 MySQL 中有一些等效的东西(如果我没记错的话是 GOUP_CONCAT
here你可以找到一些东西)
SQL 服务器
我正在尝试 return 1 行的用户包含他们的名字、姓氏、电子邮件等,并且他们的所有角色都包含在通过 UserRoles 连接的单独角色 table 中。
User -> UserRoles -> Role
------------- --------------- ------------
Email UserEmail Id
Firstname RoleId Name
Lastname
Phone
IsActive
declare @Email nvarchar(100);
set @Email = 'testemail@gmail.com'
SELECT [User].Email, Password, Username, Firstname, Lastname, Phone, IsActive, EmailVerified, IsBanned, BanStart, BanEnd, [Role].Name as Roles
FROM dbo.[User], [UserRole], [Role]
WHERE [User].Email = @Email AND UserRole.UserEmail = [User].Email AND UserRole.RoleId = Role.Id
Return
Email Username Firstname Lastname Phone IsActive EmailVerified IsBanned BanStart BanEnd Roles
testemail@gmail.com testemail@gmail.com daniel brownn 3199999999 1 0 0 NULL NULL Expert
testemail@gmail.com testemail@gmail.com daniel brownn 3199999999 1 0 0 NULL NULL User
不幸的是,对于具有 2 个角色的用户来说,此 return 是正确的信息,它 return 是 2 个单独的行。我的目标是在包含两个角色值的角色列中有 1 行 returned 用逗号分隔值。这可能吗?
谢谢!
您可以尝试使用JOIN
子句和STRING_AGG
方法。 Here 您可以找到此方法的文档。
您的查询结果如下:
SELECT
[User].Email,
Password,
Username,
Firstname,
Lastname,
Phone,
IsActive,
EmailVerified,
IsBanned,
BanStart,
BanEnd,
STRING_AGG([Role].Name, ', ') as Roles
FROM
dbo.[User]
JOIN [UserRole] ON [UserRole].UserEmail = [User].Email
LEFT JOIN [Role] ON [Role].Id = [UserRole].RoleId
GROUP BY
[User].Email,
Password,
Username,
Firstname,
Lastname,
Phone,
IsActive,
EmailVerified,
IsBanned,
BanStart,
BanEnd
注意 STRING_AGG
是一个 t-sql 方法,但是 MySQL 中有一些等效的东西(如果我没记错的话是 GOUP_CONCAT
here你可以找到一些东西)