1

我正在编写一个查询,其中 where 子句具有 IN 子句并且此 IN 子句中有大量值,我想获取结果,如果表中不存在 IN 子句中给出的值的值,那么原始包含0 或 null 应该返回该值。例如..

从 emp 中选择 age、sex、date_joining,其中 name IN ('amit','john','paul','dilip')

现在假设对于这个查询,数据库中不存在 john 和 paul 的数据,那么结果应该如下所示。

21 男 21-AUG-2011
空空空
空空空
25 男 2010 年 8 月 9 日

如果 null 不可能,我们也可以有 0 而不是 null

谢谢...

4

2 回答 2

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.

For older values of SQL Server, replace the line with values by:

from    (
                  select 'amit'
        union all select 'john'
        union all select 'paul'
        union all select 'dilip'
        ) filter(name)
于 2012-11-05T14:29:41.267 回答
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

在我的数据库中,我已经添加了amitdilip的详细信息,因此我使用了它UNION,因为您可以轻松获取有关可用员工的详细信息。另一方面,您可以使用UNION ALLwith Distinct

于 2012-11-05T18:52:39.960 回答