这是一个具体问题。
我有一张包含数据的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 :(得分: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