如何从db获取值以及单个查询中的值

时间:2013-07-29 19:31:22

标签: sql oracle

我的表有字段update_ version,可以有null和一些值..

Select * from Employee where employee_id =  '1234' and updated_version is null

Select * from Employee where employee_id =  '1234' and updated_version ='1'

我必须结合两个查询

我试过这样但是没有用。

Select * from Employee 
where employee_id =  '1234' 
and updated_version = (select case when updated_version is null 
                              then NULL 
                              else updated_version 
                              end) 

注意:我将从其他表

获取员工ID和updated_version的输入

对于混乱感到抱歉。更新的版本值不仅为1且为null。它可以是我从另一个表中获得的任何值。那么我从其他表中获得的价值,我必须在Employee表中查询该条件,以获得适当的结果。并非所有结果。

3 个答案:

答案 0 :(得分:2)

正如其他人所提到的那样,对输出中你想要的东西有点不清楚,但是如果我弄错了你想要“updated_version”的行填充“updated_version”的行是否为“updated_version”?意思是,你想要最“最近”的更新版本? (假设表中有给定employee_id的许多版本/行​​)。

尝试(未经测试):

select * from (
  select e.*, row_number() over (partition by employee_id order by updated_version desc nulls last) rnum
  from employee e
  where employee_id = '1234'
)
where rnum = 1;

分区依据并非严格需要,因为您只需要1个employee_id,但如果您想将其扩展为多个员工ID,则需要分区。

答案 1 :(得分:1)

尝试这种方式:

Select * from Employee 
where employee_id =  '1234' 
and (updated_version is null or updated_version='1')

编辑:

Select * 
from Employee e
left join other_table ot on ot.employee_id = e.employee_id
                         and ot.updated_version =e.updated_version

答案 2 :(得分:1)

尝试此查询:

Select * from Employee where employee_id = '1234' and (updated_version ='1' OR updated_version is null) 

编辑:试试这个(未经测试)!

Select * from Employee where employee_id = '1234' and 
CASE updated_version
WHEN '1' THEN '1' 
WHEN Null THEN Null 
ELSE updated_Version
END