SQL JOIN多个多对多表

时间:2016-09-18 11:51:05

标签: mysql sql

使用MySql,我想按给定的用户ID加入多个多对多表(users_roles和roles_permissions)。 但是我的查询有问题,因为它会产生如下错误。

  

#1054 - 未知栏' users_roles.role_id'在' on条款'

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

2 个答案:

答案 0 :(得分:1)

我认为你应该使用一套正确的连接

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 

答案 1 :(得分: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是有效的方法。希望你明白了。任何帮助,随时问一下