以下是我尝试执行并收到错误的查询。这是原始错误
消息512,级别16,状态1,行36子查询返回的值大于1。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
作为user1@abc.com,我想查看人们直接向我报告的所有记录,以及直接向我下面的人报告的记录。根据数据,我想查看EmployeeID 273、16、274、285、286、275、276、23。
获取> =到user1@abc.com Level的所有记录的目标 。这是表中当前数据的样子。```js 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) ;
大家好,我已经弄清楚了,下面是运行的代码
```js
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
)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。