Първо си представете, че двете заявки са само таблици. Вие бихте направили това:
select a.producer, a.firstquerycolumn, b.secondquerycolumn
from table1 a
join table2 b on b.producer = a.producer
Можете да замените всяка таблица със заявка (известна като вграден изглед):
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;
Може да се наложи да промените моето „присъединяване“ на „пълно външно присъединяване“, ако една заявка може да върне данни за производител, където другата не го прави. Също така бих бил склонен да преструктурирам заявката, както следва, като направя основна заявка във външните производители, присъединена към 2-те подзаявки (с премахнати производители):
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;
(Това е този тип заявка, която тествах ефективността на по-долу).
Вместо да раздуват този отговор с информация, която вероятно не представлява интерес за ОП, моите бележки относно относителната производителност на скаларните подзаявки и вградените изгледи в Oracle (поискани от PerformanceDBA) вече са офлайн тук:Бележки за производителността