带In运算符的SQL查询返回In子句中提到的数据,如何查找中提到的某个参数的数据不存在

带In运算符的SQL查询返回In子句中提到的数据,如何查找中提到的某个参数的数据不存在,sql,operators,Sql,Operators,带In运算符的SQL查询返回In子句中提到的数据,如何查找中提到的某个参数的数据不存在 例如: Select EmpName from Salary Where EmpID In (1,2,3,4,100) 现在表中没有Id为100的记录,但结果并不反映这一点 有什么线索吗 Select EmpName from Salary Where EmpID In (1,2,3,4,100) 相当于 Select EmpName from Salary Where EmpID = 1 O

带In运算符的SQL查询返回In子句中提到的数据,如何查找中提到的某个参数的数据不存在

例如:

Select EmpName from Salary Where EmpID In (1,2,3,4,100)
现在表中没有Id为100的记录,但结果并不反映这一点

有什么线索吗

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。这就是左连接所做的


然而,这是丑陋的。事实上,非常丑陋,不可扩展,而且通常是要避免的。我建议不要使用这样的结构。。。如果无法创建临时表,并且ID不是来自另一个查询,我建议在应用程序中检查它,而不是使用这种联合结构。

我可能会创建一个临时表,并执行左或右连接,然后始终从我的临时表中选择EmpID,并显示NULL或EmpName FRAMY

然后,您将得到如下查询:-

SELECT
    T.EmpId,
    S.EmpName
FROM
   Salary S
LEFT OUTER JOIN
   TempTable T
ON
   T.EmpID = EmpID

这个查询的结果应该是什么?你所说的结果不反映这一点是什么意思?IN关键字基本上是OR子句的替换。因此,它正在搜索EmpID=1或EmpID=2或。。。等等,@SecretSquirrel:OP希望看到该列表中没有找到1名员工。问题是应该以何种方式显示。您使用的是哪种数据库?嗯,谢谢,这就解决了问题