我试图重写以下查询(不是我自己创建的),因为这会引发执行错误:
旧查询:
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语句吗?让我知道我能做些什么来解决这个问题吗?
发布于 2014-12-16 13:44:41
如果没有两个表别名为C,则上一个查询可能会工作。
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发布于 2014-12-16 13:44:27
IN可能是这里最好的解决方案。IN将从“外部”表返回所有记录,其中内部表(或子查询)中有匹配的记录。
如果执行了JOIN,外层表的记录将与内表中的记录配对,因此,如果内表中有多个匹配项,则可能会得到多个结果。您可以对结果执行DISTINCT以消除重复,但是IN可能会更快,因为它不需要匹配所有记录,然后消除重复。
发布于 2014-12-16 13:57:00
尝试LIKE语句,因为如果ID是字符串值,那将是最好的实践。
https://stackoverflow.com/questions/27505956
复制相似问题