代码之家  ›  专栏  ›  技术社区  ›  mikrimouse

使用nvl功能选择

  •  0
  • mikrimouse  · 技术社区  · 8 年前

     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 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,则我得到无效的worker,如果未选中(n),则我得到的是正常的worker,我需要得到的是n,即所有worker(无效和正常)。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Gordon Linoff    8 年前

    停止使用 (+) 语法!使用适当的显式外部联接。

    然而,我认为不需要外部连接——与常数的比较无论如何都会使其失效。我认为这正是你想要的:

    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);