我被困在最后2个小时试图找出如何进行此查询或查找示例,直到现在没有结果搜索,所以我将在这里发布什么是我的问题。我有一组用户,并且有一个特定的订单,我需要获取值。
因此,第1组是管理员,他可以看到所有组,对他来说,获取值的查询将是
SELECT g1.group_id,g1.description FROM groups g1 ORDER BY g1.description
其他组可以查看除管理员组以外的所有组(在本例中为id为1),对于其他用户,查询获取值将为:
SELECT g2.group_id,g2.description FROM groups g2 WHERE g2.group_id > 1 ORDER BY g2.description
我尝试用CASE语句创建一些东西,但这不起作用,我知道子查询不能返回超过1行,我得到这样的错误
[Err] 1242 - Subquery returns more than 1 row
我的查询到现在为止,错误的一个:
SELECT
CASE WHEN (SELECT ug.group_id FROM users_groups ug
WHERE ug.login="admin" and ug.group_id = 1)
THEN (SELECT g1.group_id,g1.description FROM groups g1 ORDER BY g1.description)
ELSE (SELECT g2.group_id,g2.description FROM groups g2 WHERE g2.group_id > 1 ORDER BY g2.description)
END
所以我需要结果取决于已登录用户组,如果用户是admin且他的组= 1而不是他可以看到所有组,换句话说除了组1之外的所有组,admin
任何帮助都会受到赞赏,最重要的是我按此顺序获取值,只有这两个g1.group_id,g1.description或g2.group_id,g2.description
所需的输出将是:
对于用户管理员 -
group_id description
1 Administrator
2 Customer
3 Supplier
对于非管理员的用户 -
group_id description
2 Customer
3 Supplier
答案 0 :(得分:2)
SELECT g.group_id, g.description
FROM groups AS g
CROSS JOIN user_groups AS ug
WHERE ug.login = @username
AND (ug.group_id = 1 OR g.group_id > 1)
ORDER BY g.description
@username
是执行查询的用户名的占位符。