按ID或名称进行联合查询

时间:2015-09-11 20:09:06

标签: sql oracle

您好我正在尝试开发一个看似容易做的报告,其中有人可以输入ID号或名称并搜索和检索数据。只有在我拥有所有标准的情况下,我才能使这个工作正常,而且我尝试了几种不同的方法。 First,Last和ID中的每一个都是用于填写或留空的框。在没有浪费大量空间的情况下,我基本上已经完成了,任何人都可以帮忙吗?

联:

Select 
worker_id as "ID",
worker_last_name as "Last",
worker_first_name as "First",
worker_phone_home as "Home_Phone",
worker_email as "Email"
from worker
where worker_id = :parm_EB_pnum --inputvalue
UNION
Select 
worker_id as "ID",
worker_last_name as "Last",
worker_first_name as "First",
worker_phone_home as "Home_Phone",
worker_email as "Email"
from worker
where (
upper(worker_first_name) like upper(:parm_EB_first) and 
upper(worker_last_name) like upper(:parm_EB_last)
)

我也尝试使用=而不是类似的结果,我需要两个输入。我在没有UNION的where子句中尝试了一个CASE语句,但我得到了相同的结果

2 个答案:

答案 0 :(得分:0)

使用%时,您应该使用like。此外,where条件or就足以满足您的要求。您还可以执行trim删除输入值中的任何空格。

select 
worker_id as "ID",
worker_last_name as "Last",
worker_first_name as "First",
worker_phone_home as "Home_Phone",
worker_email as "Email"
from worker
where worker_id = :parm_EB_pnum
or upper(worker_first_name) like '%'||upper(:parm_EB_first)||'%' 
or upper(worker_last_name)  like '%'||upper(:parm_EB_last)||'%'

答案 1 :(得分:0)

尝试

Select 
worker_id as "ID",
worker_last_name as "Last",
worker_first_name as "First",
worker_phone_home as "Home_Phone",
worker_email as "Email"
from worker
where worker_id = (CASE WHEN :parm_EB_pnum > 0 THEN :parm_EB_pnum END) 
UNION
Select 
worker_id as "ID",
worker_last_name as "Last",
worker_first_name as "First",
worker_phone_home as "Home_Phone",
worker_email as "Email"
from worker
where 
upper(worker_first_name) like ( CASE WHEN :parm_EB_first IS NOT NULL THEN upper(:parm_EB_first) END)
and upper(worker_last_name) like ( CASE WHEN :parm_EB_last IS NOT NULL THEN upper(:parm_EB_last) END)