[英]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.