MySQL 未从计数和外连接中获取零行

标签 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 或更多的品种,但忽略具有 0 的品种

snapshot of results

感谢您就该问题提供的任何帮助!

最佳答案

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. 将过滤器放在 ON 子句中的 owner 上。否则,您将把外连接变成内连接。
  2. 使用horsebreeds中的列作为GROUP BYSELECT

关于MySQL 未从计数和外连接中获取零行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37637786/

相关文章:

javascript - 序列化多对多查询问题

php - 从多个用户获取行并按日期排序显示它们

mysql - SQL 连接 - 为什么这个简单的连接有效,尽管语法毫无意义?

java - 在 Spring Boot 应用程序的 @Transactional 方法中调用 flush()

如果未进行连接,则 Mysql 选择列为 null

MySQL Socket 在数千次连续连接后拒绝连接

mysql - 在 MySQL 函数中打印消息

mysql - 使用mysql存储生产者仅根据表中的月份和年份获取但应用日期参数?

mysql - SQL : Join with LIKE and min()

mysql - Cassandra 的模式和 RDBMS 模式的区别