1

我有两个表trips_data,分别是tripid、userid、species (int)、killcount masterspecies,其中有species_id 和speceies (string)

我正在尝试检索我希望获得的旅行中看到的所有物种的列表

sum(killcount) : tripid :species (string):species (int)
57                 300    rabbit            1
2                  300    foxes             2 
1                  300    squirels          8

依此类推,
我有以下查询,它返回我想要的所有内容,除了 sum(killcount) 应该是 57 时大约是 8000。

任何帮助将不胜感激

SELECT sum(trips_data.killcount), 
  trips_data.species,trips_data.spceces,
  masterspecies.species 
from trips_data 
join masterspecies 
WHERE tripid=$tripid 
   AND userid=1 
   AND NOT killcount=0
4

2 回答 2

2

你需要告诉数据库如何加入;否则你会得到所有可能的组合。看起来 trips_data.species 应该匹配 master_species.species_id; 那正确吗?您还需要按物种对结果进行分组。

SELECT sum(trips_data.killcount), trips_data.species, masterspecies.species 
from trips_data join masterspecies
WHERE tripid=$tripid AND userid=1 and trips_data.species=masterspecies.species_id
group by trips_data.species, masterspecies.species;
于 2013-09-11T17:01:23.760 回答
1

这是一个笛卡尔连接:

from trips_data join masterspecies 

这将为两个表中的每个记录组合返回一条记录。这通常不是本意。加入条件如下所示:

from trips_data
join masterspecies
on masterspecies.species_id = trips_data.species_id

这将匹配记录并仅返回匹配的记录,因此您的总和有可能正确得出。

于 2013-09-11T17:02:23.260 回答