mysql - 连接 3 个表的 MySQL 查询给出错误的结果
问题描述
我对请求对象(请求表)或回复请求(操作表)的用户使用数据库(结构如下)。
(注:request.user_request_id
是请求者的ID)
我想找到一个查询,它可以为我提供一个月内发出请求或回复请求的用户以及请求数、回复数和总数(请求 + 回复)。
我有一个关于 2018 年 3 月请求数量的有效查询:
SELECT user.email, COUNT(request.user_request_id) AS requests
FROM request LEFT JOIN user ON request.user_request_id = user.id
WHERE DATE_FORMAT(STR_TO_DATE(request.created_at, '%m-%d-%Y'), '%Y-%m')
= '2018-03'
GROUP BY user_request_id
ORDER BY number desc;
一个是回复数:
SELECT user.email, COUNT(action.lender_id) AS replies
FROM action LEFT JOIN user ON action.lender_id = user.id
WHERE DATE_FORMAT(STR_TO_DATE(action.created_at, '%m-%d-%Y'), '%Y-%m') =
'2018-03'
GROUP BY lender_id
ORDER BY number desc;
但是,如果我尝试在 3 个表中使用单个查询,则会出错。(例如,对于发出 3 个请求和 4 个回复的用户,它给了我 9 个请求和 9 个回复。)这是我使用的查询:
SELECT user.email,
COUNT(request.user_request_id) AS requests,
COUNT(action.lender_id) AS replies,
COUNT(request.user_request_id) + COUNT(action.lender_id) AS total
FROM request LEFT JOIN user ON user.id=request.user_request_id LEFT JOIN
action ON request.object_id=action.object_id
WHERE DATE_FORMAT(STR_TO_DATE(request.created_at, '%m-%d-%Y'), '%Y-%m')
= '2018-03'
OR DATE_FORMAT(STR_TO_DATE(action.created_at, '%m-%d-%Y'), '%Y-%m') =
'2018-03'
GROUP BY user.email
ORDER BY total desc;
有人看到我做错了吗?
解决方案
你没有做同样的 LEFT JOIN
在第二个请求中,您在操作和用户之间进行连接,"action.lender_id = user.id"
但在第三个查询中,您在请求和操作之间进行连接,"request.object_id=action.object_id"
因此基本上您不会得到相同的结果
推荐阅读
- r - 如何从 R 中的 coxph 模型摘要中总结单变量结果 - 多级协变量?
- javascript - 更改执行顺序:Javascript
- flutter - 为什么在我的 DataColumns 中的文本之后会出现 RichText 小部件
- sql - SSMS 18 的列名无效问题
- html - 使用 Bulma 制作的视图布局未按预期显示在手机上
- laravel - Laravel 8 在插入数据库期间显示数组到字符串的转换
- python - “pip install models”失败,错误代码 1“No module named 'base'
- c++ - 隐式重载比较运算符
- filter - 从 Cassandra 表中获取示例数据
- php - Doctrine 无法从请求信息中获取实例