2014-11-01 82 views
0

我想写一个查询,其中一个表中的列从另一列返回数据。我试图用子查询来做,但没有运气。我宁愿使用子查询,而不是使用“加入”,因为我还是新的SQL/Oracle和可以更好地了解子查询,以找到一个解决办法...如何查询使用子查询的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 
; 

这将返回以下数据:

senior gardener GARDENERNAME  Manages 
4    Olivia Brown  1 
4    Olivia Brown  5 
5    Emily Williams 2 
5    Emily Williams 3 

第二个查询是:

select MA_gardenermanager.gardenerID 
, MA_gardeners.gardenername "Manages" 
from MA_gardeners, MA_gardenermanager 
where MA_gardeners.gardenerID = MA_gardenermanager.gardenerID 
; 

这回S中的以下数据:

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 
; 

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

回答

0

“我宁愿使用子查询,而不是使用 找到一个解决方案‘加入’因为我对sql/oracle仍然陌生,并且可以更好地理解子查询 ...“

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

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 

;

+0

天才!这工作完美。我还没有看过使用别名,所以你的解决方案和建议非常感谢! – 2014-11-02 09:57:38

0

因为你的内部查询返回超过1行

尝试这样的: 另一种方式

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 
+0

我试过这个,但得到错误ORA-00907:缺少右括号 – 2014-11-01 19:50:31

+0

@TJDMU你能提供你的数据吗? – 2014-11-01 20:06:10

+0

@TJDMU现在更新你可以检查 – 2014-11-01 20:18:18