【问题标题】:MySQL Not getting rows with zero from count and outer joinMySQL没有从计数和外连接中获取零行
【发布时间】:2016-06-05 02:09:44
【问题描述】:

对于在线游戏,我有两张表,一张列出所有品种(马),另一张列出每个单独的动物(马),我希望列出每个品种的活着和拥有的动物总数由成员(所有者!= 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

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

【问题讨论】:

  • 用左连接试试。
  • 我得到与左右连接相同的结果

标签: mysql sql join count outer-join


【解决方案1】:

LEFT JOIN 通常优于 RIGHT JOIN -- `left 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. ON 子句中将过滤器放在owner 上。否则,您会将外部联接转变为内部联接。
  2. horsebreeds 中的列用于GROUP BYSELECT

【讨论】:

  • 谢谢您,这完全解决了问题!从现在开始,我将专注于这种方法的左连接。 @Gordon Linoff 对您的帮助很大
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多