【发布时间】:2012-01-04 16:32:48
【问题描述】:
我有这个问题:
select problems.problem_id , creator_member_id , problem_title , problem_description , sum( vote ) as totalVotes , DAYOFMONTH(problem_date) , DAYNAME(problem_date) , YEAR(problem_date) , MONTH(problem_date) , first_name , last_name , email , small_thumb , mid_thumb
from problems
left join problem_votes
on problems.problem_id = problem_votes.problem_id
left join users
on problems.creator_member_id = users.user_id
left join member_photo
on problems.creator_member_id = member_photo.member_id
where problems.problem_id = 1;
它不匹配,并返回:
-+--------------------+---------------------+------------+-----------+-------+-------------+-----------+
| problem_id | creator_member_id | problem_title | problem_description | totalVotes | DAYOFMONTH(problem_date) | DAYNAME(problem_date) | YEAR(problem_date) | MONTH(problem_date) | first_name | last_name | email | small_thumb | mid_thumb |
+------------+-------------------+---------------+---------------------+------------+--------------------------+-----------------------+--------------------+---------------------+------------+-----------+-------+-------------+-----------+
| NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
+------------+-------------------+---------------+---------------------+------------+--------------------------+-----------------------+--------------------+---------------------+------------+-----------+-------+-------------+-----------+
但我想知道为什么它会返回任何东西?架构有问题吗?还是查询?
我正在检查它是否没有返回任何内容,并试图返回 404 页面,但系统认为有 1 个返回行,所以它混淆了我的应用程序。
我在这里可能做错了什么?
谢谢!!
【问题讨论】:
-
看不到它会如何返回任何内容,因为您明确强制它只返回问题.problem_id = 1 的行。
-
@MarcB 是的,我也是——很奇怪,对吧? :)
-
我相信这与在没有
group by子句的情况下使用像sum这样的聚合函数有关。添加group by子句可能会修复它,或者您可能还需要将您的条件更改为having而不是where。 (或者我可能完全错了。) -
我认为它必须在 select 子句中将 sum(vote) 作为 totalVotes 做一些事情
-
@grossvogel 是的,你是对的。当我取出该子句时,它按预期返回空。但问题是我还需要它来计数,大声笑 - 有什么办法可以解决这个问题?
标签: mysql sql database left-join