SQL Query With In运算符返回IN子句中提到的数据,如何查找IN中提到的一个param不存在该数据

时间:2013-09-20 12:40:42

标签: sql operators

SQL查询使用In运算符返回IN子句中提到的数据,如何查找IN中提到的一个参数不存在该数据

示例:

Select EmpName from Salary Where EmpID In (1,2,3,4,100)

现在表中的Id 100没有记录,但结果没有反映出来,

任何线索

2 个答案:

答案 0 :(得分:2)

我可能会创建一个临时表并执行LEFTRIGHT联接,然后始终从我的临时表中选择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不是来自另一个查询,我建议在应用程序中检查它而不是使用此联合结构。