Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

सामान्य कॉलम (ए, बी) और (ए, सी) के साथ 2 प्रश्नों को केवल एक (ए, बी, सी) में कैसे बदलें?

पहले कल्पना करें कि 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;

(यह इस प्रकार की क्वेरी है जिसे मैंने नीचे के प्रदर्शन का परीक्षण किया है)।

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle पहचान कॉलम और चयन में डालें

  2. DriverManager getConnection के लिए कनेक्शन टाइमआउट

  3. AUTONOMOUS_TRANSACTION

  4. Oracle ORA-00979 - अभिव्यक्ति द्वारा समूह नहीं

  5. Oracle CLOB 4000 वर्णों से अधिक नहीं डाल सकता है?