Stel je eerst voor dat de 2 queries gewoon tabellen waren. Je zou dit doen:
select a.producer, a.firstquerycolumn, b.secondquerycolumn
from table1 a
join table2 b on b.producer = a.producer
U kunt elke tabel vervangen door een query (ook wel een inline-weergave genoemd):
select a.Prod, a.AnimalsBought, b.AnimalsExploration
from
( select Producers.name Prod, count(Animals.idanimal) AnimalsBought
from AnimalsBought, Animals, Producers
where (AnimalsBought.idanimal = Animals.idanimal)
and (Animals.owner = Producers.nif)
group by Producers.name
) a
join
( select Producers.name Prod, count(Animals.idanimal) AnimalsExploration
from AnimalsExploration, Animals, Producers
where (AnimalsExploration.idanimal = Animals.idanimal)
and (Animals.owner = Producers.nif)
group by Producers.name
) b
on a.Prod = b.Prod;
Mogelijk moet u mijn "join" wijzigen in "full outer join" als de ene query gegevens kan retourneren voor een producent waar de andere dat niet doet. Ik zou ook geneigd zijn om de query als volgt te herstructureren, waarbij een hoofdquery op Producers outer wordt samengevoegd met de 2 subquery's (met Producers verwijderd):
select Producers.name Prod, a.AnimalsBought, b.AnimalsExploration
from Producers
left outer join ( select Animals.owner, count(AnimalsBought.idanimal) AnimalsBought
from AnimalsBought, Animals
where AnimalsBought.idanimal = Animals.idanimal
group by Animals.owner
) a
on a.owner = Producers.nif
left outer join ( select Animals.owner, count(Animals.idanimal) AnimalsExploration
from AnimalsExploration, Animals
where AnimalsExploration.idanimal = Animals.idanimal
group by Animals.owner
) b
on b.owner = Producers.nif;
(Van dit type zoekopdracht heb ik de prestaties hieronder getest).
In plaats van dit antwoord op te blazen met informatie die waarschijnlijk niet van belang is voor het OP, zijn mijn opmerkingen over de relatieve prestaties van scalaire subquery's en inline views in Oracle (op verzoek van PerformanceDBA) nu hier offline:Notes on Performance