使用 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);
我有这个问题:
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);