0

在我们公司,大多数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
4

2 回答 2

0

变量在查询中被简单地替换。如果有帮助,请分解查询并考虑是否为变量输入一个数字(例如,45)和一个列表来代替内部查询:

SELECT *
FROM Table
WHERE 45 IN (42, 46, 47, 90, 45)

这将返回包含员工 ID 为 45 的行。

这有意义吗?

于 2012-07-17T20:41:50.563 回答
0

回答你的问题:是的,有人可以解释一下。可能不是我。

从 中获取值SELECT的集合。然后第一个子句检查变量的值是否所选值的集合中。如果是这样,则该子句会导致其父语句处理该行。EMP_IDTable2WHERE@EMP_IDWHERE

SELECT是一个相关的子查询。它使用表中的几个值SIDClient_Id(别名为)T1。(所述表不包含在您的代码片段中。)对从T1相关子查询处理的每一行进行评估。

于 2012-07-17T20:42:15.293 回答