sql - Left Join、Order by、MySQL优化

标签 sql mysql left-join outer-join

我有这样的查询:

   SELECT m...., a...., r....
     FROM 0_member AS m                 
LEFT JOIN 0_area AS a ON a.user_id = (SELECT user_id 
                                        FROM `0_area` 
                                       WHERE user_id = m.id 
                                    ORDER BY sec_id ASC LIMIT 1)
LEFT JOIN 0_rank as r ON a.rank_id = r.id 
    WHERE m.login_userid = '$username'

想法是从 0_area 表中获取第一行,因此尝试进行内部连接。但是,它没有按预期工作。

在 0_area 和 0_member 之间,0_member.id = 0_area.user_id。但是,有多行 0_area.user_id,我想要具有最低 sec_id 值的行。

有什么帮助吗?

最佳答案

   SELECT m...., a...., r....
     FROM 0_member AS m               
LEFT JOIN (SELECT user_id, min(sec_id) minsec
           FROM `0_area`
           GROUP BY user_id) g1 on g1.user_id=m.id
LEFT JOIN 0_area AS a ON a.user_id = g1.user_id and a.sec_id=minsec
LEFT JOIN 0_rank as r ON a.rank_id = r.id 
    WHERE m.login_userid = '$username'

关于sql - Left Join、Order by、MySQL优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071550/

相关文章:

mysql - SQL中的查询设计-满足特定条件的行中字段的ORDER BY SUM()

PHP mysql 查询返回空白屏幕

sql - 复杂的连接查询

php - 需要有关此 MySQL 查询的帮助。查找在特定时间有空的用户

sql - SELECT COUNT(*) - 如果没有匹配的行,则返回 0 和分组字段

sql - 带有 SUM 的 Postgres LEFT JOIN,缺少记录

mysql - 想要使用左连接和计数

MySQL 存储过程刚刚停止工作

mysql inner join查询3个表

Mysql 更新查询包含三个表