я получаю эту ошибку ORA-01427: однорядный подзапрос возвращает более одной строки - PullRequest
0 голосов
/ 02 апреля 2019

я написал этот запрос, чтобы заставить сотрудника, который является менеджером, выбрать минимальную зарплату для сотрудников, которыми управляет этот менеджер

select min(e.sal) from emp e 
where e.mgr = (select empno from emp  where job = upper('manager'))
group by e.sal, e.mgr

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Ваш подвыбор select empno from emp where job = upper('manager') возвращает более одной строки.Вы можете изменить WHERE-предложение с = на IN - результатом будет список всех менеджеров и минимальная зарплата их сотрудников:

select min(e.sal), e.mgr 
  from emp e 
where e.mgr IN (select empno from emp  where job = upper('manager'))
group by e.sal, e.mgr
0 голосов
/ 02 апреля 2019

В компании более одного менеджера, поэтому для этого запроса, который вы написали, возвращается более одной строки:

select empno from emp  where job = upper('manager')

Когда вы написали знак равенства =, вы сказали компилятору SQL, что 'ожидаем только одну строку в результате, от вышеупомянутого запроса.Вместо того, чтобы писать знак равенства, вы должны использовать функцию IN:

 e.mgr IN (select empno from emp  where job = upper('manager'))

Полный код, как и должно быть:

select min(e.sal) from emp e 
where e.mgr in (select empno from emp  where job = upper('manager'))
group by e.sal, e.mgr 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...