Group by 不适用于子句 mysql 中的 where?
Group by is not working with where in clause mysql?
嗨,我有两个 table,一个是用户,另一个是 user_details
用户 table 是
id name
---------
1 John
2 Tom
3 Amy
4 Kat
user_details table 是
id user_id money created_on
------------------------------------
1 1 2000 2016-12-01
2 1 5000 2016-12-02
3 1 6000 2016-12-03
4 2 2050 2016-12-01
5 2 5020 2016-12-02
6 3 6000 2016-12-04
我需要像
这样的结果
name user_id money created_on
------------------------------------
John 1 6000 2016-12-03
Tom 2 5020 2016-12-02
Amy 3 6000 2016-12-03
Kat 4 NULL NULL
我的问题是我需要 user_details table 的最近 created_on 的记录,为此我写了以下查询但我得到了所有结果谁能告诉我什么我的查询有误
SELECT * FROM `user` as `u` LEFT JOIN ( SELECT user_id,money,created_on FROM `user_details` WHERE created_on IN (SELECT MAX(created_on) FROM user_details group by user_id )) `userdata` ON `u`.`id` = `userdata`.`user_id`;
在您的内部子查询中,您只需按 user_id 分组,但不要按您当前在其他查询中 select 的用户的 user_id 进行过滤。
换句话说:您甚至不需要按 user_id 分组,只需在外部子查询中使用别名 select 给定用户的 MAX(created_on)
即可:
SELECT * FROM `user` as `u` LEFT JOIN
( SELECT user_id,money,created_on FROM `user_details` x WHERE created_on IN
(SELECT MAX(created_on) FROM user_details
WHERE x.user_id = user_details.user_id))
`userdata` ON `u`.`id` = `userdata`.`user_id`;
嗨,我有两个 table,一个是用户,另一个是 user_details
用户 table 是
id name
---------
1 John
2 Tom
3 Amy
4 Kat
user_details table 是
id user_id money created_on
------------------------------------
1 1 2000 2016-12-01
2 1 5000 2016-12-02
3 1 6000 2016-12-03
4 2 2050 2016-12-01
5 2 5020 2016-12-02
6 3 6000 2016-12-04
我需要像
这样的结果name user_id money created_on
------------------------------------
John 1 6000 2016-12-03
Tom 2 5020 2016-12-02
Amy 3 6000 2016-12-03
Kat 4 NULL NULL
我的问题是我需要 user_details table 的最近 created_on 的记录,为此我写了以下查询但我得到了所有结果谁能告诉我什么我的查询有误
SELECT * FROM `user` as `u` LEFT JOIN ( SELECT user_id,money,created_on FROM `user_details` WHERE created_on IN (SELECT MAX(created_on) FROM user_details group by user_id )) `userdata` ON `u`.`id` = `userdata`.`user_id`;
在您的内部子查询中,您只需按 user_id 分组,但不要按您当前在其他查询中 select 的用户的 user_id 进行过滤。
换句话说:您甚至不需要按 user_id 分组,只需在外部子查询中使用别名 select 给定用户的 MAX(created_on)
即可:
SELECT * FROM `user` as `u` LEFT JOIN
( SELECT user_id,money,created_on FROM `user_details` x WHERE created_on IN
(SELECT MAX(created_on) FROM user_details
WHERE x.user_id = user_details.user_id))
`userdata` ON `u`.`id` = `userdata`.`user_id`;