表结构
user
id | name |
---|---|
1 | dog |
2 | cat |
book
id | name | user_id | score |
---|---|---|---|
1 | 数学 | 1 | 100 |
2 | 语文 | 2 | 120 |
3 | 英语 | 1 | 190 |
4 | 数学2 | 1 | 130 |
1 , 对关联表进行限制, 限制表中的最大值
SELECT
*
FROM
`user` us
JOIN book bk ON us.id = bk.user_id
AND bk.id = (SELECT id FROM book ORDER BY score DESC limit 1)
结果:
此方法能只关联 book 表中最大的记录
2 , 需要关联 book 中每一个user_id 的最大值
使用过滤中间表, filterTable, 先过滤过最大的, 然后分组, 再进行关联
SELECT
*
FROM
`user` us
JOIN (
SELECT MAX(score) score, user_id FROM book GROUP BY user_id
) filterTable ON us.id = filterTable.user_id
JOIN book bk ON bk.user_id = filterTable.user_id AND bk.score = filterTable.score
结果: