Per prima cosa immagina che le 2 query fossero solo tabelle. Faresti così:
select a.producer, a.firstquerycolumn, b.secondquerycolumn
from table1 a
join table2 b on b.producer = a.producer
Puoi sostituire ogni tabella con una query (nota come vista in linea):
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;
Potrebbe essere necessario modificare il mio "join" in "join esterno completo" se una query può restituire dati per un produttore mentre l'altra no. Sarei anche propenso a ristrutturare la query come segue, facendo una query principale sui Producer esterni uniti alle 2 sottoquery (con Producers rimossi):
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;
(È di questo tipo di query che ho testato le prestazioni di seguito).
Piuttosto che gonfiare questa risposta con informazioni probabilmente non di interesse per l'OP, le mie note sulle prestazioni relative delle sottoquery scalari e delle viste inline in Oracle (richieste da PerformanceDBA) sono ora offline qui:Note sulle prestazioni