一尘不染

如何将2个具有公共列(A,B)和(A,C)的查询变成一个(A,B,C)?

sql

我目前有2条查询返回

PRODUCER                       FirstQueryColumn       
------------------------------ ---------------------- 
aaaaaaaaaaaa                   1                      
bbbbbbbbbbb                    1

PRODUCER                       SecondQueryColumn      
------------------------------ ---------------------- 
aaaaaaaaaaaa                   2                      
bbbbbbbbbbb                    1

我想知道的是如何进行处理,以便可以在单个查询中获得相同的数据,也就是说,我想要可以产生(的东西Producer, FirstQueryColumn, SecondQueryColumn)

我怎样才能做到这一点?

这是我当前的查询:

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;

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;

如您所见,在这种情况下,联接不会做很多事情:

select Producers.name Prod, count(AnimalsBought.idanimal) AnimalsBought, count(AnimalsExploration.idanimal) AnimalsExploration
from Producers, Animals, AnimalsBought, AnimalsExploration
where (AnimalsExploration.idanimal = Animals.idanimal) and (Animals.owner = Producers.nif) group by Producers.name;

还是我做错了什么?


阅读 145

收藏
2021-03-17

共1个答案

一尘不染

我想animals.idanimal是一个主键。如果是这样,则可以使用左外部联接并count在要切断的目标列上编写查询NULLs

select producers.name prod,
       count(animalsbought.idanimal) animalsbought,
       count(animalsexploration.idanimal) animalsexploration
from producers
  join animals on  animals.owner = producers.nif
  left join animalsbought on animalsbought.idanimal = animals.idanimal
  left join animalsexploration on animalsexploration.idanimal = animals.idanimal
group by producers.name;
2021-03-17