Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara mengubah 2 kueri dengan kolom umum (A, B) dan (A, C) menjadi hanya satu (A, B, C)?

Pertama bayangkan 2 kueri itu hanya tabel. Anda akan melakukan ini:

select a.producer, a.firstquerycolumn, b.secondquerycolumn
from table1 a
join table2 b on b.producer = a.producer

Anda dapat mengganti setiap tabel dengan kueri (dikenal sebagai tampilan sebaris):

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;

Anda mungkin perlu mengubah "gabung" saya menjadi "gabung luar penuh" jika satu kueri dapat mengembalikan data untuk produsen sedangkan yang lainnya tidak. Saya juga cenderung untuk merestrukturisasi kueri sebagai berikut, membuat kueri utama pada Produser luar bergabung dengan 2 subkueri (dengan Produser dihapus):

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;

(Jenis kueri inilah yang saya uji kinerjanya di bawah).

Daripada mengasapi jawaban ini dengan informasi yang mungkin tidak menarik bagi OP, catatan saya tentang kinerja relatif subkueri skalar dan tampilan sebaris di Oracle (diminta oleh PerformanceDBA) sekarang offline di sini:Catatan tentang Kinerja



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. n persen teratas n% teratas

  2. Oracle sql:perbarui jika ada yang lain masukkan

  3. Bagaimana mengonversi stempel waktu dengan milidetik hingga saat ini di Oracle

  4. Cara Menghapus Nol ketika Bagian Integer adalah Nol di Oracle

  5. SQL:Parse string yang dipisahkan koma dan gunakan sebagai join