如何';订购人';嵌套在SQL Server中?
我使用SQL Server 2012,并尝试按子查询中的名称对以下查询的结果进行排序,但始终会得到SQL执行错误 我做错了什么或错过了什么 我的查询:如何';订购人';嵌套在SQL Server中?,sql,sql-server,select,stored-procedures,sql-order-by,Sql,Sql Server,Select,Stored Procedures,Sql Order By,我使用SQL Server 2012,并尝试按子查询中的名称对以下查询的结果进行排序,但始终会得到SQL执行错误 我做错了什么或错过了什么 我的查询: SELECT A.EmpID, (SELECT B.EmpID, B.LastName + ', ' + B.FirstName AS TM FROM dbo.EmpTable AS B WHERE B.SupEmpID = A.EmpID) FROM dbo.EmpTable AS A WHERE
SELECT A.EmpID,
(SELECT B.EmpID, B.LastName + ', ' + B.FirstName AS TM
FROM dbo.EmpTable AS B
WHERE B.SupEmpID = A.EmpID)
FROM dbo.EmpTable AS A
WHERE A.NTID = 'someID'
ORDER BY B.LastName + ', ' + B.FirstName
在columnlist中的相关子查询中返回多个列。 这应该会给你一个错误 选择时,只能在选择列表中指定一个表达式 子查询不随EXISTS一起引入 使用联接而不是子查询如何
SELECT A.EmpID,
B.LastName + ', ' + B.FirstName AS TM
FROM dbo.EmpTable AS A
INNER JOIN dbo.EmpTable AS B
ON B.SupEmpID = A.EmpID
WHERE A.NTID = 'someID'
ORDER BY B.LastName + ', ' + B.FirstName
非常感谢-这解决了问题,效果非常好。我会尽快接受。:)假定两个名称中都没有逗号(不太可能),可以通过不进行连接来增加使用索引的可能性。当您在源列上调用函数进行连接/分组/排序(即使是隐式的,比如连接或转换,甚至是基本的数学)时,您这样做是为了使数据库不能使用索引来完成查询的这一部分,从而降低查询速度(优化器有时可以解决这一问题,但这是需要遵守的第一条规则)。