gpt4 book ai didi

连接 3 个表的 MySQL 查询给出了错误的结果

转载 作者:太空宇宙 更新时间:2023-11-03 11:28:47 26 4
gpt4 key购买 nike

我使用一个数据库(下面附上的结构)来处理请求对象(请求表)或回复请求(操作表)的用户。

Database structure

(注: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" 所以基本上你不会得到相同的结果

关于连接 3 个表的 MySQL 查询给出了错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51789714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com