Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да превърнем 2 заявки с общи колони (A, B) и (A, C) само в една (A, B, C)?

Първо си представете, че двете заявки са само таблици. Вие бихте направили това:

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) вече са офлайн тук:Бележки за производителността



  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 SQL Developer?

  2. Как да създадете ADDM задача и да проверите нейния отчет

  3. работа с json в oracle

  4. Списък с външни ключове и таблиците, към които се отнасят в Oracle DB

  5. Как да използвам PBKDF2 в Oracle 12c?