SQL Query With In Operator 返回 IN 子句中提到的数据,如何找到 IN 中提到的一个参数的数据不存在
例子 :
Select EmpName from Salary Where EmpID In (1,2,3,4,100)
现在表中没有 ID 100 的记录,但结果没有反映这一点,
任何线索
我可能会创建一个临时表并执行LEFT
或RIGHT
加入,然后始终EmpID
从我的临时表中选择并显示NULL
或EmpName
显示Salary
。
然后你会得到一个像这样的查询: -
SELECT
T.EmpId,
S.EmpName
FROM
Salary S
LEFT OUTER JOIN
TempTable T
ON
T.EmpID = EmpID
这个
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 条件为真的所有行。
如果没有这样的行,它将不会返回 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,在另一列中返回员工姓名。如果没有这样的员工,它将以 NULL 作为名称。(这就是 LEFT JOIN 所做的)
然而,这很丑陋。确实,非常丑陋,不可扩展,通常是要避免的。我建议不要使用这样的构造...如果无法创建临时表,并且 ID 不是来自另一个查询,我建议在应用程序中检查它而不是使用这个联合-ed 结构。