MySQL不会从count和outer join获得零行

时间:2016-06-05 02:09:44

标签: mysql sql join count outer-join

对于在线游戏,我有两个表,其中列出了所有品种(马匹),另一个表列出了每个动物(马),我希望列出每个品种的活着和拥有的动物总数由成员(所有者!= 0)。我得到的行的结果有值但不是计数为零的行。我知道我需要一个外部联接,但我不能正确构建它吗?

以下是查询:

$breedquery = mysql_query("SELECT COUNT(H.breed) AS totalbreed, H.breed FROM horses H RIGHT JOIN horsebreeds B ON H.breed = B.breedname WHERE H.owner != 0 GROUP BY H.breed ORDER BY totalbreed DESC");

这里是结果的快照,你可以看到它可以返回那些有1个或更多但是省略了零的品种

snapshot of results

感谢您对此问题的任何帮助!

1 个答案:

答案 0 :(得分:0)

LEFT JOIN通常比RIGHT JOIN更可取 - “左连接保留第一个表格中通常更容易遵循的所有行。

SELECT COUNT(H.breed) AS totalbreed, B.breedname
FROM horsebreeds B LEFT JOIN
     horses H   
     ON H.breed = B.breedname AND H.owner <> 0
GROUP BY B.breedname
ORDER BY totalbreed DESC;

然后您需要进行两项更改:

  1. 将过滤器放在owner子句中的ON上。否则,您将外部联接转换为内部联接。
  2. 使用horsebreedsGROUP BYSELECT的列。