2013-03-19 62 views
0

這是一個特定的問題。SQL查詢返回行,即使它不在表中

我有一個包含數據的Excel工作表。類似的數據存在於關係數據庫表中。某些行可能不存在或者可能存在一些額外的行。目標是使用表中的數據驗證Excel表格中的數據。

我有以下查詢

Select  e_no, start_dt,end_dt 
    From   MY_TABLE 
    Where  e_no In 
    (20231, 457) 

在這種情況下,e_no 457不存在於數據庫中(並因此不返回)。但是我希望我的查詢返回一行,即使它不存在(457,null,null)。我怎麼做 ?

回答

0

爲什麼不簡單地從電子表格中填充數據庫中的臨時表並加入這個臨時表?任何其他解決方案都可能會變得更加努力並且更難以維護。

+0

是不是有反正我們可以編寫一個查詢來完成這件事? – user2434

3

對於Sql-Server:使用臨時表或表類型變量和左的連接MY_TABLE

Sql-Server fiddle demo

Declare @Temp Table (e_no int) 

Insert into @Temp 
Values (20231), (457) 

Select t.e_no, m.start_dt, m.end_dt 
From  @temp t left join MY_TABLE m on t.e_no = m.e_no 

如果你的傳球值是一個CSV文件列表,然後用split function獲得插入到@Temp的值。

+0

這就是你如何插入多個值!你爲什麼6年前不寫這本書? –

+0

@MikeBurton:是什麼讓你在6年前回歸?哦順便說一句,我6年前不是'stackoverflow.com'的成員。 – Kaf

+0

不是'UNION'更好的解決方案嗎? –

0

你也可以做這樣一個UNION

Select 
    e_no, start_dt ,end_dt 
From   MY_TABLE 
Where e_no In (20231, 457) 

UNION 

Select 457, null, null 
+0

如果他在列表中添加更多'e_nos',(例如)其中10個不在'MY_TABLE'中,會發生什麼?那麼如果'457'實際上在'MY_TABLE'中呢? – Kaf