簡體   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