你检查role_perms
表格是否有 arole_id
为 1 的行?因为应该有查询才能工作。
这是如何运作的?
首先,尝试理解表格及其关系。我想你的表格有点像下面的表格。
ROLE表包含应用程序中的角色(例如 Admin、Guest)。
Table 1: ROLE
-----------------------------------------------
role_id role_description
-----------------------------------------------
1 Admin
2 Guest
PERMISSIONS表包含应用程序中的权限。
Table 2: PERMISSIONS
-----------------------------------------------
permission_id permission_description
-----------------------------------------------
1 Can create files
2 Can edit files
3 Can view files
ROLE_PERMISSIONS表包含应用程序中不同角色的权限。以下面的数据为例,表示角色 1(Admin)的权限为 1、2、3(可以分别创建、编辑、查看文件)。
Table 3: ROLE_PERMISSIONS
-----------------------------------------------
role_id permission_id
-----------------------------------------------
1 1
1 2
1 3
2 3
现在,尝试理解查询。
SELECT t2.permission_description
FROM role_permissions as t1 JOIN permissions as t2
ON t1.permission_id = t2.permission_id
WHERE t1.role_id = 1
第一行指示应该检索哪些数据。它说从列t2
中的表中选择值permission_description
。因此,查询的可能结果是:
可以创建文件
可以编辑文件
可以查看文件
第二行和第三行指示应从何处检索数据。role_permissions
它说从和条件的联合表中检索数据permissions
ON
:
t1.permission_id = t2.permission_id
注意: AS
表示将使用别名。意思, t1
和 一样 role_permissions
。
从上面的PERMISSIONS和ROLE_PERMISSIONS表中,联合表如下所示。
Table 4: Joint ROLE_PERMISSIONS and PERMISSIONS
------------------------------------------------------------------------
role_id permission_id permission_id permission_description
------------------------------------------------------------------------
1 1 1 Can create files
1 2 2 Can edit files
1 3 3 Can view files
2 3 3 Can view files
这是将检索数据的表。
到目前为止,指令是permission_description
从联合表(表 4)中检索 。
第四行向第一条指令添加了一个约束,只选择permission_description
s WHERE
role_id = 1
。因此,完整的指令是
permission_description
从联合表(表 4)中检索s,其中 srole_id
为 1。
用简单的英语意味着:
检索角色“管理员”的权限描述。
因此查询的结果是:
Table 5: PERMISSION_DESCRIPTIONS of Admin
-----------------------------------------------
permission_description
-----------------------------------------------
Can create files
Can edit files
Can view files
希望这对你有帮助!