根据条件从case / if语句中获取值

时间:2014-09-11 12:06:31

标签: mysql

我被困在最后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

1 个答案:

答案 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是执行查询的用户名的占位符。