mysql加入子查询问题

时间:2018-10-08 18:37:52

标签: mysql join mysqli subquery

我在将sql join与group&subquery结合以选择最大值时遇到问题。

表1

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

table2

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

table3

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

运行此查询时(按用户ID对所有game_id进行分组),我成功了:

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-无效使用组功能

编辑:

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

  

“字段列表”中的未知列“ table3.fans”

1 个答案:

答案 0 :(得分:1)

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

您在where子句中使用聚合函数for button in buttons: toggle(button) ,这会引发错误MAX(update_time)

在不允许的地方使用聚合函数,最终您可以使用Haves子句..

invalid use of group function

在这种情况下,您还要引用子查询中不可见的table3 ..因此,您应使用别名引用此列 您用于子查询的表格结果(粉丝)的