sql - 子查询错误返回超过 1 个值
问题描述
以下是我尝试执行并收到错误的查询。这是原始错误
消息 512,级别 16,状态 1,第 36 行子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。
作为 user1@abc.com,我想查看人们直接向我报告的所有记录以及直接向我下属的人报告的记录。根据我想查看 EmployeeID 273、16、274、285、286、275、276、23 的数据。
获取所有 >= 到 user1@abc.com 级别的记录的目标。下面是当前表中数据的样子。
select A.ManagerID, A.ManagerEmail, A.Email, A.EmployeeID, A.Title, A.DeptID, A.Level
from TOrganization_Hierarchy A
where A.ManagerEmail = 'user1@abc.com'
and A.Level >= (select B.Level
from TOrganization_Hierarchy B
where B.ManagerEmail = A.ManagerEmail) ;
大家好,我已经弄清楚了,下面是运行的代码
WITH CTE
AS (SELECT OH.employeeid,
OH.managerid,
OH.email AS EMPEMAIL,
1 AS level
FROM TORGANIZATION_HIERARCHY OH
WHERE OH.[email] = user1@abc.com
UNION ALL
SELECT CHIL.employeeid,
CHIL.managerid,
CHIL.email,
level + 1
FROM TORGANIZATION_HIERARCHY CHIL
JOIN CTE PARENT
ON CHIL.[managerid] = PARENT.[employeeid]),
ANOTHERCTE
AS (SELECT
T.[email],
T.[destination_account],
T.[customer_service_rep_code]
FROM [KGFGJK].[DBO].[TRANS] AS T)
SELECT *
FROM ANOTHERCTE
INNER JOIN CTE
ON CTE.empemail = ANOTHERCTE.[email];
解决方案
像这样的比较=, !=, <>, <, <= , >, >=
只需要比较 1 个值。
因此,具有多条记录的结果会导致错误。
EXISTS
但是可以为此使用一个。
...
WHERE A.ManagerEmail = 'user1@abc.com'
AND EXISTS
(
SELECT 1
FROM TOrganization_Hierarchy B
WHERE B.ManagerEmail = A.ManagerEmail
AND B.Level <= A.Level
)
顺便说一句,查看数据,匹配相同的 ManagerID 可能更有效。
...
WHERE A.ManagerEmail = 'user1@abc.com'
AND EXISTS
(
SELECT 1
FROM TOrganization_Hierarchy B
WHERE B.ManagerID = A.ManagerID
AND B.Level <= A.Level
)