基于三个表创建视图,其中三个表以列为其中一个表中的行

陶里

我开始学习SQL,了解视图。我想知道是否可以在一个视图中连接三个表,其中某些列将基于这些表中的行。

我有三个表:

角色:

Id | Name  | PermissionId
1  | Admin | 1
2  | Staff | 2

RolePermissions:

Id | RoleId | PermissionId
1  | 1      | 1
2  | 1      | 2
3  | 1      | 3
4  | 2      | 1
5  | 2      | 2      <- staff doesn't have permission 3

权限:

Id | Name
1  | Perm1
2  | Perm2
3  | Perm3
.
. (not fixed number of permissions)

我想创建这样的视图:

Id (of role) | Name  | Perm1 | Perm2 | Perm3  ... (not fixed number of columns)
1            | Admin | True  | True  | True
2            | Staff | True  | True  | False

可能吗?

朱利安·瓦瓦瑟(Julien Vavasseur)

如果您不知道要输出多少列,则无法使用视图。下面的代码应该为您提供正确的方向。如果您需要动态构建列列表,请在带有动态SQL的过程中使用它

; With roles(Id, Name, PermissionID) as (
Select * From (values(1, 'Admin', '1'), (2, 'Staff', '2')) as r(Id, Name, PermissionId)
), RolePermissions(Id, RoleId, PermissionId) as (
Select * From (Values(1, 1, 1), (2, 1, 2), (3, 1, 3), (4, 2, 1), (5, 2, 2)) as p(Id, RoleId, PermissionId)
), Permissionss(Id, Name) as (
Select * From (Values(1, 'Perm1'), (2, 'Perm2'), (3, 'Perm3')) as p(Id, Name)
), data as(
Select r.Id, rp.PermissionId, p.Name From Roles as r
Inner Join RolePermissions as rp on rp.RoleId = r.Id
Inner Join Permissionss as p on rp.PermissionId = p.Id
)
Select piv.Id as [Id of Role], r.Name
, [Perm1] = case when [Perm1] is not null then 'true' else 'false' end
, [Perm2] = case when [Perm2] is not null then 'true' else 'false' end
, [Perm3] = case when [Perm3] is not null then 'true' else 'false' end
From data
Pivot( max(PermissionId)
For Name in ( [Perm1], [Perm2], [Perm3])
) as piv
Inner Join roles as r on r.Id = Piv.Id

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从三个表创建视图

来自分类Dev

如何联接三个表,其中一个表与其他两个表的ID不匹配?

来自分类Dev

使用 postgres 创建一个包含三个不同表的三列的视图

来自分类Dev

基于三个表的层次结构

来自分类Dev

基于三个表的MySQL视图和转置

来自分类Dev

MySQL中三个表的数据表示

来自分类Dev

如何使用自动布局创建三个视图,其中一个固定宽度的高度和其他两个固定高度的高度

来自分类Dev

使用第三个表从另一个表插入表中的行

来自分类Dev

查询三个表

来自分类Dev

三个组合框,其中一个功能正常

来自分类Dev

具有相同src的三个gif,仅重新加载其中一个

来自分类Dev

连接三个表并将最后一个表行显示为列

来自分类Dev

基于日期从三个表中查询MySQL

来自分类Dev

一个表与三个表中的许多空值

来自分类Dev

无法连接三个表并仅返回一个表中的所有记录

来自分类Dev

一个表与三个表中的许多空值

来自分类Dev

Mysql中的三个表的联合

来自分类Dev

如何基于一对一(三个表)创建一对多关系?

来自分类Dev

一个ForEach函数,使一个tr到三个tds并创建一个动态表

来自分类Dev

Mysql连接三个表(其中两个相似)

来自分类Dev

如何在SQL Server 2012中一次插入三个表

来自分类Dev

如何从三个表中删除行-查询错误

来自分类Dev

基于三个条件创建表1减去表2的表

来自分类Dev

从三个表之一中选择一个值

来自分类Dev

MySQL创建一个视图,其中包含3个表中的2个表的所有行组合?

来自分类Dev

在一个实体中映射三个相同的表

来自分类Dev

在一个表中同时进行三个SQL查询

来自分类Dev

将三个表中的值合并为一个

来自分类Dev

在一个实体中映射三个相同的表

Related 相关文章

热门标签

归档