简体   繁体   English

SQL JOIN多个多对多表

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

Using MySql, I will like to join multiple many-to-many tables (users_roles and roles_permissions) by a given user id. 使用MySql,我想通过给定的用户ID联接多个多对多表(users_roles和Roles_permissions)。 But there is something wrong with my query because it gives an error as below. 但是我的查询有问题,因为它给出了如下错误。

#1054 - Unknown column 'users_roles.role_id' in 'on clause' #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 

My table structure inside PHPMyAdmin is as follow: 我在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

I think you should use a set of proper join 我认为您应该使用一组适当的联接

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 


You can use the below query, You can do it in two ways, 您可以使用以下查询,可以通过两种方式进行:

Using JOINS 使用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;

Using Alias 使用别名

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;

But using JOINS is the efficient way. 但是使用JOINS是有效的方法。 Hope you got it. 希望你明白了。 Any help, feel free to ask 任何帮助,请随时询问

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

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