我正在编写一个查询,其中where子句有IN子句,并且在这个IN子句中有大量值,我想获取结果,如果表中没有值存在于IN子句中给出的值那么包含0或null的raw应返回该值。例如......
select age,sex,date_joining from emp where name IN ('amit','john','paul','dilip')
现在假设这个查询,数据库中不存在john和paul的数据,那么结果应该如下所示..
21 male 21-AUG-2011 null null null null null null 25 male 9-aug-2010
如果无法使用null,我们也可以使用0而不是null
...谢谢
答案 0 :(得分:4)
select filter.name
, emp.age
, emp.sex
, emp.date_joining
from (
values ('amit'), ('john'), ('paul'), ('dilip')
) filter(name)
left join
emp
on emp.name = filter.name
对于较旧的SQL Server值,请将行values
替换为:
from (
select 'amit'
union all select 'john'
union all select 'paul'
union all select 'dilip'
) filter(name)
答案 1 :(得分:0)
您还可以使用公用表表达式来获得此结果:
;With AllEmpDetails as
(
Select [Name] from emp
UNION Select 'amit'
UNION Select 'john'
UNION Select 'paul'
UNION Select 'dilip'
)Select AllEmpDetails.Name, e2.Age, e2.Sex, e2.date_joining
from AllEmpDetails
Left Join emp e2 on e2.[Name] = AllEmpDetails.Name
在我的数据库中,我已经添加了 amit 和 dilip 的详细信息,因此我使用了UNION
,因为您可以轻松获取有关可用员工的详细信息。另一方面,您可以将UNION ALL
与Distinct
一起使用。