पहले कल्पना करें कि 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;
(यह इस प्रकार की क्वेरी है जिसे मैंने नीचे के प्रदर्शन का परीक्षण किया है)।
जानकारी के साथ इस उत्तर को ब्लोट करने के बजाय शायद ओपी के लिए रुचि नहीं है, स्केलर सबक्वायरीज़ के सापेक्ष प्रदर्शन पर मेरे नोट्स और ओरेकल में इनलाइन व्यू (प्रदर्शन डीबीए द्वारा अनुरोध किया गया) अब यहां ऑफ़लाइन हैं:प्रदर्शन पर नोट्स