MySQL 未从计数和外连接中获取零行
MySQL Not getting rows with zero from count and 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");
这是结果的快照,如您所见,它适用于 return 具有 1 个或多个但忽略具有零的品种
感谢您对问题的任何帮助!
LEFT JOIN
通常优于 RIGHT JOIN
-- ` 左连接将所有行保留在第一个 table 中,这通常更易于遵循。
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;
那么你需要做两个改变:
- 在
ON
子句中将过滤器放在 owner
上。否则,您会将外部联接变成内部联接。
- 将
horsebreeds
中的列用于 GROUP BY
和 SELECT
。
对于在线游戏,我有两个表格,一个列出了所有品种(马种),另一个列出了每个动物(马),我想列出每个品种的存活动物总数并由成员拥有(所有者!= 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");
这是结果的快照,如您所见,它适用于 return 具有 1 个或多个但忽略具有零的品种
感谢您对问题的任何帮助!
LEFT JOIN
通常优于 RIGHT JOIN
-- ` 左连接将所有行保留在第一个 table 中,这通常更易于遵循。
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;
那么你需要做两个改变:
- 在
ON
子句中将过滤器放在owner
上。否则,您会将外部联接变成内部联接。 - 将
horsebreeds
中的列用于GROUP BY
和SELECT
。