如何编写IN子句查询以替换null没有值参数

时间:2012-11-05 14:24:36

标签: sql sql-server

我正在编写一个查询,其中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

...谢谢

2 个答案:

答案 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

Live example at SQL Fiddle.

对于较旧的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 ALLDistinct一起使用。