我的表有字段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表中查询该条件,以获得适当的结果。并非所有结果。
答案 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