在我们公司,大多数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
答案 0 :(得分:0)
在查询中简单地替换变量。如果它有帮助,如果你为变量输入一个数字(例如,45)和一个代替内部查询的列表,则分解查询并考虑它:
SELECT *
FROM Table
WHERE 45 IN (42, 46, 47, 90, 45)
这将返回包含员工ID为45的行。
这有意义吗?
答案 1 :(得分:0)
回答你的问题:是的,有人可以解释。可能不是我。
SELECT
从EMP_ID
获取Table2
个值的集合。然后,第一个WHERE
子句检查变量@EMP_ID
的值是否为 所选值的集合。如果是这样,WHERE
子句会导致其父语句处理该行。
SELECT
是一个相关的子查询。它使用表格(别名为SID
)中的几个值Client_Id
和T1
。 (所述表格未包含在您的代码段中。)对于从T1
处理的每一行,都会评估相关子查询。