mysql 多表关联一对多查询最新的一条数据 深坑等你

博客主要围绕yii2多表关联查询单字段去重未生效的问题展开。指出单表唯一查询用distinct,多表用group by,还说明了GROUP BY和ORDER BY的使用顺序及执行顺序。最后提到想找最新数据需用group by和max,采用低效的in再次查询筛选。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意核心要点:
yii2 多表关联查询单字段去重没有生效
原因是
单表的唯一查询用:distinct
多表的唯一查询用:group by --但是注意下面的坑
参考: https://blog.youkuaiyun.com/lkforce/article/details/52598155
GROUP BY 和 ORDER BY一起使用时,ORDER BY要在GROUP BY的后面。
写的顺序:select … from… where…group by… having… order by…
执行顺序:from… where…group by…having… select … order by…

所以在order by拿到的结果里已经是分组的完的最后结果。
由from到where的结果如下的内容。

到group by时就得到了根据category_id分出来的多个小组

到了select的时候,只从上面的每个组里取第一条信息结果会如下

**(特别注意:)**即使order by也只是从上面的结果里进行排序。并不是每个分类的最新信息。

另一个博客查询正确, 不过是单表查询, 我没有去验证对应的其他字段是否正确
参见 https://blog.youkuaiyun.com/zhangqun23/article/details/52904707
我想列出每个部门最高薪水的结果,sql语句如下:
SELECT DEPT, MAX(SALARY) AS MAXIMUM
FROM STAFF
GROUP BY DEPT

解决
由于进度问题, 用exists解决失败, 最后解决如下
如果想找最新的数据,则需要使用group by和max。找出最新数据的id, 采用低效的 in 对查询的最新数据的id进行再次查询筛选.
参见 https://blog.youkuaiyun.com/john_hongming/article/details/42742965

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值