まず、2つのクエリが単なるテーブルであると想像してください。これを行う:
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;
(以下のパフォーマンスをテストしたのは、このタイプのクエリです。)
おそらくOPに関係のない情報でこの回答を肥大化させるのではなく、Oracleでのスカラーサブクエリとインラインビューの相対的なパフォーマンスに関する私のメモ(PerformanceDBAによって要求された)はここでオフラインになりました:パフォーマンスに関するメモ