2016-09-18 108 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是有效的方法。希望你明白了。任何幫助,請隨時問