昨天晚上,领导在微信群里发了一个bug,说一个订单点击详情查看不到菜品,但是其他的订单却没有问题。
于是,今天一大早就开始排查这个错误。我一开始觉得可能是数据的问题,报的错误应该是空指针。后来我在错误中发现了这个错误:
Expected one result (or null) to be returned by selectOne(), but found: 2;看字面意思应该是结果集应该接受一条数据,
但是却接受到了两条数据。奇怪了呀,订单号是唯一的,怎么会有两条呢?后来我发现了这条语句是个关联查询,左联结了一个用户表,
LEFT JOIN sys_user u22 ON u22.id = a.user_id 关联之后查出来就是两条数据,哎,这就很奇怪了。为什么是两条呢?这里我发现了一个问题
a.user_id = 4 但是u22.id查出来的两条数据id却是4aa4d239f311419f9b0a14305d3a70dd,4bce03d1bf6d4fecac7399c55fcf7d78。后来发现
如果a.user_id = '4'这样写,又查不到数据了,我感觉我好想发现了盲点。后来查了一下资料,原来这个user_id 是int类型的,
查询的时候mysql会给它转换类型,所以查出来的时候是4aa4d239f311419f9b0a14305d3a70dd,4bce03d1bf6d4fecac7399c55fcf7d78这两条。
后来改成这样的了就可以了:
<!--此处sys_user表的id在判等时自动截取数字转化为了int类型,会出现查出多条数据的情况-->
<sql id="hgoOrderInfoJoins">
LEFT JOIN sys_user u22 ON u22.id = cast(a.user_id as char)
</sql>
浙公网安备 33010602011771号