这个sql语句正常不应该加group by,但是我理解在一一对应的情况下加group by不应该影响结果。
machine_type_id存在的情况下其他数据都可以获取到title,只有最后一个没有拿到。经测试如果将其他null的值改为19,则这个值就拿到title了,下一个值会拿不到。如果将order by改为其他字段,则所有数据都正常。如果不用group by则正常。
又修改了几个值进行测试,发现machine_type_id有值的情况下,上一条数据对应到了title。不但位置错位,还少了一条
8.0.20centos上错位。8.0.19windows正常
官网查看mysql8新功能,有个叫WITH ROLLUP的新功能,还没搞懂是干什么的,加上就好使了,但是整体会多一条数据,而且分页出现错乱
group by p.id WITH ROLLUP order by p.id desc
为解决上述问题,sql最终修改为
select p.id,p.machine_type_id,t.title,GROUPING(p.id) AS x from table1 as p left join table2 as t on t.id=p.machine_type_id where p.account_name='x' group by p.id WITH ROLLUP HAVING x<1order by p.id desc