gpt4 book ai didi

mysql 连接子查询问题

转载 作者:行者123 更新时间:2023-11-29 10:02:06 24 4
gpt4 key购买 nike

我在将 sql join 与组和子查询结合起来选择最大值时遇到问题。

表1

user_id user_name
1 x
2 t
3 y
4 i
5 o

表2

user_id game_id
1 soccer
2 soccer
2 pool
2 basketball
5 swimming

表3

user_id fans    date
1 54805 2018-10-05
2 10005 2018-10-05
2 10023 2018-10-03
3 175 2018-10-05
4 1542 2018-10-05

运行此查询时(按 user_ids 对所有 game_ids 进行分组),我成功了:

SELECT table1.user_id, table1.user_name, group_concat(table2.game_id) as games
FROM (table1
LEFT JOIN table2 on table2.user_id = table1.user_id)
group by table1.user_id

但是当尝试组合子查询返回最新的粉丝数时:

SELECT table1.user_id, table1.user_name, group_concat(table2.game_id) as games, table3.fans 
FROM ((table1
LEFT JOIN table2 on table2.user_id = table1.user_id)
INNER JOIN (SELECT * FROM table3 WHERE MAX(update_time) ORDER BY update_time LIMIT 1) AS fans ON table1.user_id = table3.user_id)
group by table1.user_id

我遇到了群组功能的问题:

#1111 - Invalid use of group function

编辑:

通过将 WHERE 更改为 HAVING 修复了问题 #1111,但我的查询仍然不好,因为 MYSQL 报告以下内容:

Unknown column 'table3.fans' in 'field list'

最佳答案

如果使用聚合函数,则必须在 group by 子句中声明聚合函数中不涉及的所有列。

您在 where 子句中使用聚合函数 MAX(update_time),这会引发错误 组函数的无效使用

不允许在 where 中使用聚合函数,最终您可以使用having子句过滤此结果..

 SELECT table1.user_id
, table1.user_name
, group_concat(table2.game_id) as games
, fans.my_res
FROM table1
INNER JOIN (
SELECT user_id, MAX(update_time) my_res FROM table3
group by user_id
ORDER BY my_res DESC LIMIT 1
) AS fans ON table1.user_id = fans.user_id
LEFT JOIN table2 on table2.user_id = table1.user_id
group by table1.user_id, table1.user_name, fans.my_res

在您的情况下,您还引用了子查询中的 table3,并且在外部不可见..因此您应该使用别名引用此列您已用于子查询的表结果(粉丝)

关于mysql 连接子查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52708256/

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