【发布时间】:2018-07-22 09:14:32
【问题描述】:
我有这个问题:
SELECT
r.*,
COUNT(rt.id) total_task,
IFNULL(SUM(IF(rt.status = 2, 1, 0)), 0) total_task_done
FROM requests AS r
LEFT JOIN request_participants AS rp ON rp.request_id = r.id
LEFT JOIN request_tasks AS rt ON rt.request_id = r.id
WHERE r.id = 10 AND rp.user_id = 3 AND rp.role = 1
这些是包含数据的表格:
-
requests+----+-----------------+--------+ | id | notes | status | +----+-----------------+--------+ | 10 | Some notes here | 1 | +----+-----------------+--------+ -
request_participants+----+---------+------------+------+ | id | user_id | request_id | role | +----+---------+------------+------+ | 18 | 3 | 10 | 0 | | 19 | 17 | 10 | 1 | +----+---------+------------+------+
我想通过其id、参与者的user_id 和role 过滤掉request 数据。
当我像上面的例子一样运行查询时,它返回一行 (request.id = 10),但是如果我从查询中删除 COUNT(rt.id) total_task, IFNULL(SUM(IF(rt.status = 2, 1, 0)), 0) total_task_done 行,它返回零行,这就是我想要的.
您能帮我指出我的查询有什么问题吗?谢谢。
【问题讨论】:
-
嗨。您实际上并没有描述输出如何成为输入的函数。您希望我们可以从您的示例和错误的查询中猜到。说明在什么情况下一行会出现在您想要的结果中。如有必要或另外将输出描述为某个查询结果的函数,您会返回足够的数据。 “通过[某些字段]过滤掉数据”不清楚。如果您知道如何正确地从它转到当前所需的输出,请考虑询问更简单的所需输出。阅读 group by 和聚合如何工作——没有 group by 的聚合隐含地给出一个组。
标签: mysql left-join filtering where