使用CASE作为可选谓词

时间:2012-02-16 22:49:19

标签: sql

有人可以帮我解决这个问题吗?

我是使用CASE的新手,我该怎么做才能做到这一点。如果rights = manager,那么我想在案例中运行代码。

select email, user_id, first_name, last_name, rights
from users u
where company_id = 2141
    and receives_emails = 'y'
    case u.rights when 'manager' then
        and user_id in (select user_id from manager_depts where company_id = u.company_id and dept_id = 2)
    end

谢谢!

2 个答案:

答案 0 :(得分:5)

这里你实际上不需要CASE,

SELECT email, u.user_id, first_name, last_name, rights
FROM users u
     LEFT JOIN manager_depts d ON d.company_id = u.company_id and d.dept_id = 2
WHERE company_id = 2141 AND receives_emails = 'y'
  AND (u.rights != 'manager' OR d.user_id IS NOT NULL)

答案 1 :(得分:-1)

以这种方式写下

select
    email, user_id, first_name, last_name, rights
from
    users u
where
    company_id = 2141
    and
    receives_emails = 'y'
    and
    (
        (
            u.rights = 'manager'
            and
            user_id in (
                    select
                        user_id
                    from
                        manager_depts
                    where
                        company_id = u.company_id
                        and
                        dept_id = 2
                )
        )
        or
        (
            u.rights <> 'manager'
        )
    )