SQL Query返回行,即使它不在表中

时间:2013-03-19 16:40:53

标签: 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)。我该怎么做?

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

为什么不从电子表格中简单地填充数据库中的临时表并加入呢?任何其他解决方案可能都是更多的工作,更难以维护。

答案 2 :(得分:0)

您也可以使用UNION

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

UNION

Select 457, null, null