Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按ID或名称的联合查询_Sql_Oracle - Fatal编程技术网

Sql 按ID或名称的联合查询

Sql 按ID或名称的联合查询,sql,oracle,Sql,Oracle,您好,我正在尝试开发一个看似简单的报告,其中有人可以输入ID号或名称,搜索和检索数据。只有当我具备了所有的标准,并且我尝试了几种不同的方法时,我才能让它起作用。第一个、最后一个和ID中的每一个都是供他们填写或留空的框。在不浪费大量空间的情况下,我基本上就是这样做的,有人能帮忙吗 工会: Select worker_id as "ID", worker_last_name as "Last", worker_first_name as "First", worker_phone_home as

您好,我正在尝试开发一个看似简单的报告,其中有人可以输入ID号或名称,搜索和检索数据。只有当我具备了所有的标准,并且我尝试了几种不同的方法时,我才能让它起作用。第一个、最后一个和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)
)
对于类似的结果,我还尝试使用=代替like,我需要两个输入。我尝试在where子句中使用不带并集的CASE语句,但得到了相同的结果

当使用like时,应该使用%。此外,where条件或将足以满足您正在尝试的操作。也可以进行修剪以删除输入值中的任何空格

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)||'%'
试一试


我不确定我是否看到了一个问题。查询是否返回您想要的内容?如果不是,则发布可复制的测试用例。发布DDL以创建worker表,DML以插入一些示例行,告诉我们绑定变量是什么,并告诉我们要返回哪些行。它仅在我同时填写ID、first_name和Last_name时返回行。我希望它在只输入ID或姓时返回值,而不是全部。抱歉,我不清楚这些值中是否有一些为空?这可能会导致问题。不,每个人都分配了一个ID,每个人都有一个名字,输入值可能为空。是的,他们可能会说不记得自己的ID,但清楚地知道自己的名字,这没有意义。如果输入了:param_EB_pnum,并且它与worker_id匹配,则无论:param_EB_first和:param_EB_last是什么,都将获得该行。一个可复制的测试用例在sqlfiddle.com上安装一个fiddle可能会很好,它可能会帮助说明您看到了什么以及您想要什么。有没有一种方法可以在没有所有需要的值的情况下工作?我想知道是不是我的软件argos。它似乎只有在我有身份证、名字和姓氏时才会给我结果。这样做很好,但很可能人们只会使用其中一个,ID或name,或者在查询中这样做。当满足这三个条件之一时返回一行
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)