我有这个问题:
#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所有工人的时间(无效和正常)。
答案 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);