Đầu tiên hãy tưởng tượng 2 truy vấn chỉ là bảng. Bạn sẽ làm điều này:
select a.producer, a.firstquerycolumn, b.secondquerycolumn
from table1 a
join table2 b on b.producer = a.producer
Bạn có thể thay thế từng bảng bằng một truy vấn (được gọi là chế độ xem trong dòng):
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;
Bạn có thể cần phải thay đổi "tham gia" của tôi thành "tham gia bên ngoài đầy đủ" nếu một truy vấn có thể trả về dữ liệu cho một nhà sản xuất trong khi truy vấn kia thì không. Tôi cũng sẽ có xu hướng cấu trúc lại truy vấn như sau, tạo một truy vấn chính trên Nhà sản xuất bên ngoài được kết hợp với 2 truy vấn phụ (với Nhà sản xuất đã bị xóa):
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;
(Đây là loại truy vấn mà tôi đã kiểm tra hiệu suất của bên dưới).
Thay vì làm cồng kềnh câu trả lời này với thông tin có lẽ không được OP quan tâm, ghi chú của tôi về hiệu suất tương đối của các truy vấn con vô hướng và chế độ xem nội tuyến trong Oracle (do PerformanceDBA yêu cầu) hiện đang ngoại tuyến tại đây:Ghi chú về Hiệu suất