子查询错误返回了多个值

时间:2019-12-19 14:56:39

标签: sql sql-server

以下是我尝试执行并收到错误的查询。这是原始错误

  

消息512,级别16,状态1,行36子查询返回的值超过1。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。

作为user1@abc.com,我想查看人们直接向我报告的所有记录以及直接向我下面的人报告的那些记录。根据数据,我想查看EmployeeID 273、16、274、285、286、275、276、23。

获取> =的所有记录的目标 user1@abc.com 级别。这是表中当前数据的样子。 TOrganization_Hierarchy

if (hudson.model.Hudson.instance.getNode(params.JUMPHOST).toComputer().isOnline()) {
    echo "node is online"
} else {
    echo "node is offline"
}

大家好,我已经弄清楚了,下面是运行的代码

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) ;

2 个答案:

答案 0 :(得分:1)

=, !=, <>, <, <= , >, >=这样的比较只希望比较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
)

答案 1 :(得分:0)

我很确定您想要经理的级别。这需要正确的相关子句:

select oh.*
from TOrganization_Hierarchy oh
where oh.ManagerEmail = 'user1@abc.com' and
      oh.Level >= (select oh2.Level
                   from TOrganization_Hierarchy oh2
                   where oh2.Email = oh.ManagerEmail
                  ) ;

请注意,我也更改了表别名,因此它们是有意义的。

请注意,如果您想要给定经理的最高级别,则可以使用max()

select oh.*
from TOrganization_Hierarchy oh
where oh.ManagerEmail = 'user1@abc.com' and
      oh.Level = (select max(oh2.Level)
                  from TOrganization_Hierarchy oh2
                  where oh2.ManagerEmailEmail = oh.ManagerEmail
                 ) ;