2012-11-05 68 views
1

我正在寫一個查詢,其中where子句有IN子句,並且此IN子句中有大量值,我想獲取結果,以便如果有在IN子句中給出的值中,表中沒有值,那麼包含0或null的原始數據應返回該值。例如..如何寫入IN子句查詢來替換空值爲無值參數

 
select age,sex,date_joining from emp where name IN ('amit','john','paul','dilip') 

現在假設該查詢,爲約翰和保羅的數據不在數據庫存在,那麼結果應該是像下面..

 
21 male 21-AUG-2011 
null null null 
null null null 
25 male 9-aug-2010 

我們也可以有0而不是空的如果空是不可能

謝謝...

+0

您可以使用連接。 – tempidope

回答

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) 
+0

嗨Andomar,我不知道在我的系統爲什麼這會給出以下錯誤 '關鍵字'值'附近的語法不正確。 –

+0

可能是SQL Server的舊版本,我會更新答案 – Andomar

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

相關問題