繁体   English   中英

子查询结果“单行子查询结果超过一行”

[英]Sub-query results 'Single Row Sub-Query results more than One Row'

我在Oracle 11g的SQL Terminal中创建了一个表Office


3列是谁
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM