我在Oracle 11g上的SQL终端中创建了一个表Office
。
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.
我想检索ename
大于或等于salary
boss
的所有员工姓名(salary
)。
输出应该是:
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:单行子查询返回多行
答案 0 :(得分:2)
select emp.ename
from office emp
where emp.salary>= ( select boss.salary
from office boss
where emp.bname = boss.ename)
答案 1 :(得分:1)
您也可以使用自联接
select o1.ename
from office o1
join office o2 on o1.ename = o2.bname
where o1.salary >= o2.salary
答案 2 :(得分:0)
自己加入桌子:
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)
答案 3 :(得分:0)
使用exists和相关子查询的第三种方法。
SELECT Emps.EName
FROM Office Emps
WHERE EXISTS (SELECT *
FROM Office Boss
WHERE Emps.BName = Boss.EName
and Emps.Salary >= Boss.Salary)