2014-11-01 80 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