Mysql 使用left join 联表查询时,用主副表都有的字段去order by时的注意事项

结论:Mysql 使用left join 联表查询时,用主副表都有的字段去order by时,如果不指定字段来源的表,当查询结果中没有这个字段时,sql会报错:ambiguous,字段不明确,而当查询结果中有该字段时,则不会报错,且以查询结果中的那个字段为排序依据。

 

过程如下:

在开发过程中,偶然发现了一个不解的情况,sql 如下:

SELECT s.id, s.ent_name, s.update_time
FROM t_apply s
LEFT JOIN t_project_info p ON s.project_id = p.id
ORDER BY
    update_time DESC;

这里的update_time在 t_apply 表和t_project_info表中都存在,但是sql语句标红的“update_time”不会报错!!

去查相关资料之后才知道原因为查询结果中已指定了字段来源为s.update_time, 所以按s表来排序依据;如果查询结果中没有这个字段,就会报错。

总结:开发过程中,尽量还是都指定一下字段来源,以上SQL没有去指定是因为使用了分页插件PageHelper的缘故,前端传过来的排序字段无法去指定联表中指定的表。这也容易导致在使用这个分页插件的时候,容易出现排序的错误,注意注意!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值