繁体   English   中英

SQL JOIN多个多对多表

[英]SQL JOIN multiple many-to-many tables

使用MySql,我想通过给定的用户ID联接多个多对多表(users_roles和Roles_permissions)。 但是我的查询有问题,因为它给出了如下错误。

#1054-'on子句'中的未知列'users_roles.role_id'

SELECT roles.name, permissions.name
FROM users_roles, roles_permissions
JOIN roles ON users_roles.role_id = roles.id
JOIN permissions ON roles_permissions.permission_id = permissions.id
WHERE users_roles.user_id = 1 AND roles_permissions.role_id = roles.id 

我在PHPMyAdmin中的表结构如下:

Table users_roles
id | user_id | role_id

Table roles_permissions
id | role_id | permissions_id

Table roles
id | name | description

Table permissions
id | name | description

我认为您应该使用一组适当的联接

SELECT roles.name, permissions.name
FROM users_roles 
JOIN roles ON users_roles.role_id = roles.id
JOIN roles_permissions on roles_permissions.role_id = users_roles.role_id
JOIN permissions ON roles_permissions.permission_id = permissions.id
WHERE users_roles.user_id = 1 


您可以使用以下查询,可以通过两种方式进行:

使用JOINS

SELECT roles.name, permissions.name
FROM users_roles INNER JOIN roles_permissions
ON (users_roles.role_id = roles.id)
INNER JOIN permissions ON (roles_permissions.permission_id = permissions.id)
AND users_roles.user_id = 1 
AND roles_permissions.role_id = roles.id;

使用别名

SELECT R.name, P.name from
users_roles UR, roles_permissions RP,  permissions P, roles R
WHERE UR.role_id = R.id AND
RP.role_id = UR.role_id AND
RP.permission_id = P.id
UR.user_id = 1;

但是使用JOINS是有效的方法。 希望你明白了。 任何帮助,请随时询问

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM