使用 nvl 函数选择

selecting with nvl function

我有这个问题:

 select w.worker_id,   w.lastname,pd.invalid
                             from workers w,personal_data pd
                             where pd.worker_id (+) = w.worker_id
                             and nvl(pd.invalid,'N')='Y'

我有复选框 (y,n),该复选框的目的是获取包含无效人员的列表(如果已选中)以及未与正常工作人员(包括无效人员)一起检查时。有了这个,我总是得到无效列表。

然后 select :

  select w.worker_id,   w.lastname,pd.invalid
                                 from workers w,personal_data pd
                                 where pd.worker_id (+) = w.worker_id
                                 and pd.invalid =nvl(:p_invalid,pd_invalid)

如果复选框是 Y 我得到无效的工人,当没有选中时 (n) 我得到的只是普通工人,我需要得到什么时候是 N 所有工人(无效和正常)。

停止使用 (+) 语法!使用正确的、显式的外部连接。

但是,我认为您不需要外部联接——您与常量的比较无论如何都会撤消它。我认为这符合您的要求:

select w.worker_id, w.lastname, pd.invalid
from workers w join
     personal_data pd
    on pd.worker_id = w.worker_id
where (:p_invalid = 'N' or pd.invalid = :p_invalid);