-1

SQL Query With In Operator 返回 IN 子句中提到的数据,如何找到 IN 中提到的一个参数的数据不存在

例子 :

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

现在表中没有 ID 100 的记录,但结果没有反映这一点,

任何线索

4

2 回答 2

2

我可能会创建一个临时表并执行LEFTRIGHT加入,然后始终EmpID从我的临时表中选择并显示NULLEmpName显示Salary

然后你会得到一个像这样的查询: -

SELECT
    T.EmpId,
    S.EmpName
FROM
   Salary S
LEFT OUTER JOIN
   TempTable T
ON
   T.EmpID = EmpID
于 2013-09-20T12:52:05.567 回答
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 条件为真的所有行。

如果没有这样的行,它将不会返回 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 结构。

于 2013-09-20T12:44:37.530 回答