【发布时间】:2019-02-18 14:12:58
【问题描述】:
SELECT mairie.city, permission.permission
FROM permission , user_mairie, mairie
WHERE user_mairie.iduser = 1
AND user_mairie.idmairie = mairie.idmairie
CASE user_mairie.idrole
WHEN 2 THEN
JOIN user_permission
ON user_permission.idpermission = permission.idpermission
AND user_permission.iduser = user_mairie.iduser
END
ORDER BY mairie.idmairie, permission.idpermission
如果该用户具有特定角色,我正在尝试获取该用户的权限。
“mairie”在法语中是“市政厅”。
一个用户可以在不同的“mairie”中扮演不同的角色。
如果user_mairie 上的用户idrole = 2,那么我们必须去表“user_permission”获取它的权限。
如果user_mairie 上的用户idrole = 1,那么他是admin,拥有ALL 权限,但是权限没有写在user_permission 中(因为user_permission 只用于idrole = 2)。
我想要的是例如:
如果 user_mairie.idrole = 1:
SELECT *
FROM permission
如果 user_mairie.idrole = 2
SELECT *
FROM permission, user_permission
WHERE user_mairie.idrole = 2
AND user_mairie.iduser = user_permission.iduser
AND user_permission.idpermission = permission.idpermission
我可以使用我的编程语言并发出 2 个请求来做到这一点,但我想知道在纯 SQL 中是否可以解决此问题。
一些数据:
表权限:
idpermission | permission
1 | permission_1
2 | permission_2
3 | permission_3
表 user_mairie:
iduser | idmairie | idrole
1 | 1 | 1
1 | 2 | 2
表用户权限:
iduser | idpermission | idmairie
1 | 1 | 2
1 | 3 | 2
餐桌主人:
idmarie | city
1 | mairie_1
2 | mairie_2
我想要的结果(对于给定的 iduser = 1)将是:
mairie_1 : permission_1, permission_2, permission_3
mairie_2 : permission_1, permission_3
感谢您阅读我。
【问题讨论】:
-
这些是完全不同的查询,可能无法将它们组合成一个逻辑查询。
-
FROM permission , user_mairie, mairiecarthesians join 已被弃用大约 25 年。考虑使用JOIN -
今日提示:始终使用现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接! -
永远不要使用
SELECT * -
@jarlh 和 cid :好的,我从现在开始尝试使用 JOIN,但我有坏习惯