2016-09-18 116 views
0

使用MySQL,我会想加入多个多到许多由给定用户ID表(users_roles和roles_permissions)。 但是我的查询有些问题,因为它给出了如下的错误。SQL加入多个多到多个表

#1054 - 在未知列'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 
+3

不能混合旧隐式和显式连接语法。 –

+1

那么,你可以混合使用新旧语法,但最好不要(显式Join更加限制哪些列可以在ON中使用):'FROM users_roles JOIN roles on users_roles.role_id = roles.id JOIN roles_permissions ON roles_permissions.role_id = roles.id JOIN权限ON roles_permissions.permission_id = permissions.id WHERE users_roles.user_id = 1' – dnoeth

+0

您有链接,我可以使用JOINS检查“新”语法样式吗? – CodeWhisperer

回答

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


您可以使用下面的查询, 你可以这样做有两种方式,

使用连接

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是有效的方法。希望你明白了。任何帮助,请随时问