[英]Sub-query results 'Single Row Sub-Query results more than One Row'
我在Oracle 11g的SQL Terminal中创建了一个表Office
。
Ename | Bname | salary
Ename | Bname | salary
哪里:
Ename
:雇主名称。
Bname
:老板名字
Salary
:员工工资。
Office Table
中的值为:-
ENAME BNAME SALARY -------------------- -------------------- ---------- Zahid Muheet 30000 Arif Muheet 20002 Ahtishaam Muheet 20002 Ayaaz Muheet 2000 Zaid Muheet 40000 Muheet Akib 40000 6 rows selected.
我想检索所有salary
大于或等于其boss
salary
雇员姓名( ename
)。
输出应为:
ENAME ------ Zaid
我在终端上写查询
select emp.ename from office emp where emp.salary >= (select a.salary from office a, office b where a.ename = b.bname)
我想它应该可以工作,但是会导致错误:
ORA-01427:单行子查询返回多个行
select emp.ename
from office emp
where emp.salary>= ( select boss.salary
from office boss
where emp.bname = boss.ename)
您也可以为此使用自联接
select o1.ename
from office o1
join office o2 on o1.ename = o2.bname
where o1.salary >= o2.salary
自己加入表格:
SELECT
oa.ename
FROM office AS oa
INNER JOIN office AS ob ON oa.bname = ob.ename
WHERE oa.salary >= ob.salary;
这将创建一个结果集,其中每个人的薪水和姓名以及其老板的薪水和姓名均可用,然后根据员工薪水大于或等于老板的薪水的人员进行筛选。
在这种情况下,不需要使用子查询,但是如果绝对需要,也可以使用子查询:
SELECT
oa.ename
FROM office AS oa
WHERE oa.salary >= (SELECT ob.salary FROM office AS ob WHERE ob.ename = oa.bname)
并且使用存在和相关子查询的第三种方法。
SELECT Emps.EName
FROM Office Emps
WHERE EXISTS (SELECT *
FROM Office Boss
WHERE Emps.BName = Boss.EName
and Emps.Salary >= Boss.Salary)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.