在我们公司,大多数SP都使用以下逻辑。我无法理解变量如何与 IN 子句一起使用,如下面的查询。谁能解释一下?
WHERE ( ( @EMP_ID ) in ( select distinct(EMP_ID)
from Table2(nolock)
where SID = T1.SID and status='A' and client_id=T1.Client_Id ) )
order by EMP_ID
在我们公司,大多数SP都使用以下逻辑。我无法理解变量如何与 IN 子句一起使用,如下面的查询。谁能解释一下?
WHERE ( ( @EMP_ID ) in ( select distinct(EMP_ID)
from Table2(nolock)
where SID = T1.SID and status='A' and client_id=T1.Client_Id ) )
order by EMP_ID
变量在查询中被简单地替换。如果有帮助,请分解查询并考虑是否为变量输入一个数字(例如,45)和一个列表来代替内部查询:
SELECT *
FROM Table
WHERE 45 IN (42, 46, 47, 90, 45)
这将返回包含员工 ID 为 45 的行。
这有意义吗?
回答你的问题:是的,有人可以解释一下。可能不是我。
从 中获取值SELECT
的集合。然后第一个子句检查变量的值是否在所选值的集合中。如果是这样,则该子句会导致其父语句处理该行。EMP_ID
Table2
WHERE
@EMP_ID
WHERE
这SELECT
是一个相关的子查询。它使用表中的几个值SID
和Client_Id
(别名为)T1
。(所述表不包含在您的代码片段中。)对从T1
相关子查询处理的每一行进行评估。