用nvl函数选择

时间:2017-09-12 10:32:56

标签: sql oracle report nvl

我有这个问题:

#pragma once
#include "stdio.h"
#include "winsock2.h"
#include "conio.h"
#include "stdint.h"

int initialiseSocket(WORD version);
void errSocket(int err);

#define MAX_PACKET_SIZE 10*1024

我有复选框(y,n),复选框的目的是获取带有invalids的列表(如果已选中)以及未使用包括invalids在内的普通工作人员检查。有了这个,我总是得到无效的名单。

选择此项:

 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)我得到的只是普通工人,我需要得到N所有工人的时间(无效和正常)。

1 个答案:

答案 0 :(得分:2)

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

但是,我不认为你需要一个外连接 - 你对一个常数的比较无论如何都要撤消它。我认为这样做你想要的:

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