首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Server中替换IN语句?

如何在Server中替换IN语句?
EN

Stack Overflow用户
提问于 2014-12-16 13:38:26
回答 4查看 64关注 0票数 0

我试图重写以下查询(不是我自己创建的),因为这会引发执行错误:

旧查询:

代码语言:javascript
复制
        SELECT LastName + ', ' + FirstName AS 'Teamleader'
        FROM dbo.EmpTable
        WHERE EmpID IN (
                SELECT SupEmpID
                FROM dbo.EmpTable
                WHERE 
                SupEmpID = (
                                SELECT EmpID 
                                FROM EmpTable 
                                WHERE SupEmpID = (
                                                SELECT EmpID 
                                                FROM EmpTable 
                                                WHERE NTID = @NTID
                                                )
                                )
                        )
        ORDER BY TeamLeader

我想使用JOIN而不是嵌套的查询,但是当涉及IN语句时,我不知道如何应用这一点。到目前为止,我有以下内容,但这是返回相同的错误(可能因为我仍然有IN语句在那里)。

新查询(尝试):

代码语言:javascript
复制
            SELECT      A.LastName + ', ' + A.FirstName AS TeamLeader
            FROM        dbo.EmpTable AS A
            WHERE       A.EmpID IN
                        (
                            SELECT      D.SupEmpID
                            FROM        dbo.EmpTable AS B
                            INNER JOIN  dbo.EmpTable AS C
                            ON          C.SupEmpID = B.EmpID
                            INNER JOIN  dbo.EmpTable AS C
                            ON          D.SupEmpID = C.EmpID
                            WHERE       B.NTID = @NTID
                        )
            ORDER BY TeamLeader

有人能在这里解释一下IN语句吗?让我知道我能做些什么来解决这个问题吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-12-16 13:44:41

如果没有两个表别名为C,则上一个查询可能会工作。

代码语言:javascript
复制
SELECT      A.LastName + ', ' + A.FirstName AS TeamLeader
            FROM        dbo.EmpTable AS A
            WHERE       A.EmpID IN
                        (
                            SELECT      D.SupEmpID
                            FROM        dbo.EmpTable AS B
                            INNER JOIN  dbo.EmpTable AS C
                            ON          C.SupEmpID = B.EmpID
                            INNER JOIN  dbo.EmpTable AS D
--------------------------------------------------------^
                            ON          D.SupEmpID = C.EmpID
                            WHERE       B.NTID = @NTID
                        )
            ORDER BY TeamLeader
票数 2
EN

Stack Overflow用户

发布于 2014-12-16 13:44:27

IN可能是这里最好的解决方案。IN将从“外部”表返回所有记录,其中内部表(或子查询)中有匹配的记录。

如果执行了JOIN,外层表的记录将与内表中的记录配对,因此,如果内表中有多个匹配项,则可能会得到多个结果。您可以对结果执行DISTINCT以消除重复,但是IN可能会更快,因为它不需要匹配所有记录,然后消除重复。

票数 1
EN

Stack Overflow用户

发布于 2014-12-16 13:57:00

尝试LIKE语句,因为如果ID是字符串值,那将是最好的实践。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27505956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档