Sql 如何使用子查询查询Oracle表

Sql 如何使用子查询查询Oracle表,sql,oracle,Sql,Oracle,我试图编写一个查询,其中一个表中的一列从另一列返回数据。我曾尝试使用子查询来完成此操作,但没有成功。我更喜欢使用子查询而不是使用“JOIN”来找到解决方案,因为我对sql/oracle还是新手,可以更好地理解子查询 第一个查询是: SELECT MA_gardenermanager.managerID "senior gardener" , MA_gardeners.gardenername , MA_gardenermanager.gardenerID "Manages" FROM MA_ga

我试图编写一个查询,其中一个表中的一列从另一列返回数据。我曾尝试使用子查询来完成此操作,但没有成功。我更喜欢使用子查询而不是使用“JOIN”来找到解决方案,因为我对sql/oracle还是新手,可以更好地理解子查询

第一个查询是:

SELECT MA_gardenermanager.managerID "senior gardener"
, MA_gardeners.gardenername
, MA_gardenermanager.gardenerID "Manages"
FROM MA_gardenermanager, MA_gardeners
where MA_gardeners.gardenerID = MA_gardenermanager.managerID
order by MA_gardenermanager.managerID
, MA_gardenermanager.gardenerID
;
select MA_gardenermanager.gardenerID
, MA_gardeners.gardenername "Manages"
from MA_gardeners, MA_gardenermanager
where MA_gardeners.gardenerID = MA_gardenermanager.gardenerID
;
这将返回以下数据:

senior gardener GARDENERNAME      Manages
4               Olivia Brown      1
4               Olivia Brown      5
5               Emily Williams    2
5               Emily Williams    3
GARDENERID  Manages
1           Oliver Smith
2           Jack Jones
3           Harry Taylor
5           Emily Williams
第二个问题是:

SELECT MA_gardenermanager.managerID "senior gardener"
, MA_gardeners.gardenername
, MA_gardenermanager.gardenerID "Manages"
FROM MA_gardenermanager, MA_gardeners
where MA_gardeners.gardenerID = MA_gardenermanager.managerID
order by MA_gardenermanager.managerID
, MA_gardenermanager.gardenerID
;
select MA_gardenermanager.gardenerID
, MA_gardeners.gardenername "Manages"
from MA_gardeners, MA_gardenermanager
where MA_gardeners.gardenerID = MA_gardenermanager.gardenerID
;
这将返回以下数据:

senior gardener GARDENERNAME      Manages
4               Olivia Brown      1
4               Olivia Brown      5
5               Emily Williams    2
5               Emily Williams    3
GARDENERID  Manages
1           Oliver Smith
2           Jack Jones
3           Harry Taylor
5           Emily Williams
我试图将上述两个查询结合起来,得出以下结论:

senior gardener GARDENERNAME      Manages
4               Olivia Brown      Oliver Smith
4               Olivia Brown      Emily Williams
5               Emily Williams    Jack Jones
5               Emily Williams    Harry Taylor
我已经试过了,但还是得到了ORA-01427:单行子查询返回多行:

SELECT MA_gardenermanager.managerID "senior gardener"
, MA_gardeners.gardenername
, MA_gardenermanager.gardenerID "manages"
, (select MA_gardeners.gardenername
from MA_gardeners, MA_gardenermanager
where MA_gardeners.gardenerID = MA_gardenermanager.gardenerID)
FROM MA_gardenermanager, MA_gardeners
where MA_gardeners.gardenerID = MA_gardenermanager.managerID
;

有没有一种简单的方法可以通过将第二个查询作为子查询插入第一个查询来组合这两个查询?

因为您的内部查询返回的行不止一行

试着这样做: 另一种方式

select L.senior_gardener,L.GARDENERNAME,R.Manages from 
(SELECT MA_gardenermanager.managerID "senior gardener"
, MA_gardeners.gardenername
, MA_gardenermanager.gardenerID "Manages"
FROM MA_gardenermanager, MA_gardeners
where MA_gardeners.gardenerID = MA_gardenermanager.managerID
order by MA_gardenermanager.managerID
, MA_gardenermanager.gardenerID
) L
left join (select MA_gardenermanager.gardenerID
, MA_gardeners.gardenername "Manages"
from MA_gardeners, MA_gardenermanager
where MA_gardeners.gardenerID = MA_gardenermanager.gardenerID)R
on L.Manages=R.GARDENERID
我更喜欢使用子查询而不是使用 “加入”,因为我还是sql/oracle新手,可以更好地理解 子查询

弗诺德。子查询只会使实际上非常简单的事情复杂化。您只需在FROM子句中引用两次MAU GANDERS表。使用别名来区分查询其余部分中的实例:

SELECT gm.managerID "senior gardener"
       , mgr.gardenername
       , gar.gardenername "Manages"
FROM MA_gardenermanager gm
     , MA_gardeners mgr
     , MA_gardeners gar
where mgr.gardenerID = gm.managerID 
and gar.gardenerID = gm.gardenerID
order by gm.managerID
       , gm.gardenerID

)

我尝试了这个,但得到了错误ORA-00907:错过的权利parenthesis@TJDMU你能为你的数据提供fiddle吗?不确定你说的提供fiddle是什么意思?我会检查fiddle-我尝试了你编辑的版本,但没有成功…我得到错误ORA-00904:L.MANAGES:无效标识符。Genius!这很有效。我还没有考虑使用别名,所以非常感谢您的解决方案和建议!