SQL查询使用In运算符返回IN子句中提到的数据,如何查找IN中提到的一个参数不存在该数据
示例:
Select EmpName from Salary Where EmpID In (1,2,3,4,100)
现在表中的Id 100没有记录,但结果没有反映出来,
任何线索
答案 0 :(得分:2)
我可能会创建一个临时表并执行LEFT
或RIGHT
联接,然后始终从我的临时表中选择EmpID
,并且NULL
或{{ 1}}来自显示的EmpName
。
然后你会得到一个类似的查询: -
Salary
答案 1 :(得分:0)
这个
Select EmpName
from Salary
Where EmpID In (1,2,3,4,100)
相当于
Select EmpName
from Salary
Where EmpID = 1
OR EmpID = 2
OR EmpID = 3
OR EmpID = 4
OR EmpID = 100
并将返回where条件为true的所有行。
如果没有这样的行,它将不会返回EmpID = 100的行...
这是一种在MySQL中获得你想要的东西的混乱方式
select ids_to_get.id, EmpName from
from
(select 1 id
union all
select 2 id
union all
select 3 id
union all
select 4 id
union all
select 100 id) ids_to_get
left join Salary on ids_to_get.id = Salary.EmpID
这将在一列中返回id,而在另一列中返回eployee名称。如果没有这样的员工,它将以NULL作为名称。 (这是LEFT JOIN的作用)
然而,这是丑陋。实际上,非常难看,不可扩展,通常要避免。我建议不要使用这样的构造...如果没有办法创建临时表,并且ID不是来自另一个查询,我建议在应用程序中检查它而不是使用此联合结构。