2015-06-29 430 views
0

我有以下查詢給我一個給定的base_objectid的行數:的Oracle SQL相關子查詢

Select Count(*) 
from 
(
select di.id, di.archkey, dc.mimetype, dc.film, dc.blip, dc.originalfilename, stp.id as baseID, null as Volume, stp.path as Dateiname_org, stp.basepath as Pfad, stp.filelength as Dateilaenge 
, 1 as "Dateinummer", dc.idx 
from 
doc_instance di 
, doc_content dc 
, sto_hydstorageplace stp 
where 
di.baseobjectid = :base_objectid 
and stp.archivekey = di.archkey 
and di.id = dc.docinstanceid (+) 
and stp.imagenr = dc.idx 
union 
select di.id, di.archkey, dc.mimetype, dc.film, dc.blip, dc.originalfilename, stf.id as baseID, stf.volume as Volume, stf.filename as Dateiname_org, stol.confvalue as Pfad, stf.filesize as Dateilaenge 
, stf.fileno as "Dateinummer", dc.idx 
from 
doc_instance di 
, doc_content dc 
, sto_storagefileentry stf 
, sto_storagelevelconf stc 
, sto_storagelevelconfentry stol 
where 
di.baseobjectid = :base_objectid 
and stf.archkey = di.archkey 
and stf.storagelevel = stc.storagelevel 
and stc.id = stol.storagelevel 
and stol.confkey = 'FILEARCHIVE' 
and di.id = dc.docinstanceid (+) 
and stf.fileno-1 = dc.idx 
) temp 
order by archkey, idx 

現在我想告訴我屬於另一個表中的所有base_objectids行數,所以上述查詢必須針對base_objectid的每個特定值執行。我假設我必須將上述查詢作爲子查詢,但是我所有的試驗都失敗了。

回答

0

想必,你只需要改變select到:

select base_objectid, count(*) 

order by之前添加group by

group by base_objectid 

,並刪除限制輸出的任何條件。

但很難說。您的查詢基本上無法理解,因爲:

  • 您正在使用舊式join語法。 從不from子句中使用逗號。 ALways使用明確的join語法。
  • 更糟糕的是,您正在使用(+)的外連接,甚至Oracle也不會再推薦。
  • 您沒有縮進來幫助他人理解查詢。