2012-02-16 37 views
5

Ai đó có thể giúp tôi với truy vấn này không?Sử dụng CASE cho một biến vị ngữ tùy chọn

Tôi mới sử dụng CASE, làm cách nào tôi có thể thực hiện công việc này. Nếu quyền = quản lý thì tôi muốn chạy mã trong trường hợp.

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 

Cảm ơn!

+0

gì RDBMS bạn đang sử dụng? – Dan

+0

Bạn đang cố gắng xem liệu người dùng có phải là người quản lý hay bạn chỉ muốn trả lại cho họ nếu họ là người quản lý? Đây không phải là một ngôn ngữ bắt buộc - bạn không thể (thường) sửa đổi một bảng từ bên trong mệnh đề 'WHERE'. –

Trả lời

5

Bạn thực sự không cần một CASE đây,

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) 
+0

Điều đó hoàn hảo, cảm ơn! – RandyLahey

+0

@RandyLahey Vui vì tôi có thể giúp !! –

-1

Viết nó theo cách này

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' 
     ) 
    ) 
Các vấn đề liên quan