【发布时间】:2015-02-14 20:13:03
【问题描述】:
我正在尝试重写以下查询(不是我自己创建的),因为这会引发执行错误:
旧查询:
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 语句)。
新查询(尝试):
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 语句,让我知道我可以做些什么来解决这个问题吗?
【问题讨论】:
-
你为什么要重写它?它不会给您预期的结果,还是您只是不喜欢/不理解它?
-
您可以通过将所有
= (<subquery>)替换为in (<subquery>)来修复执行错误。此外,编辑您的问题并包含您遇到的实际错误。 -
所以查询抛出了错误,但是你没有告诉我们错误信息,以免我们用不必要的细节混淆?
-
您似乎正试图通过提供记录的
NTID来获取第三级父母的名字和姓氏。如果是这样,可以使用CTE来完成。您能否分享您的查询的示例数据和预期输出,以便我们更好地理解它?
标签: sql sql-server select stored-procedures sql-order-by