您的位置:首页 > 数据库 > MySQL

【小记】诡异?同样的sql,mybatis和mysql运行的结果不一样!

2017-08-05 00:00 323 查看
//不说废话了,胆小勿入!

项目中mybatis中的 sql是这样的

<select id="selectByPage" parameterType="java.util.Map"
resultType="com.shenhesoft.footbath.basis.pojo.Discount">
SELECT
a.id as id,
a.`name` as name,
a.discount as discount,
a.item_id as
itemId,
b.`name` as itemName
FROM
t_discount AS a
LEFT JOIN t_item AS b ON
a.item_id = b.id
AND b.delete_flag =#{deleteFlag,jdbcType=TINYINT}

AND
a.delete_flag=#{deleteFlag,jdbcType=TINYINT}
</select>


没错 是左外连接查询。 但是我改成内连接

SELECT
a.id as id,
a.`name` as name,
a.discount as discount,
a.item_id as
itemId,
b.`name` as itemName
FROM
t_discount AS a
INNER JOIN t_item AS b ON
a.item_id = b.id
AND b.delete_flag =#{deleteFlag,jdbcType=TINYINT}

AND
a.delete_flag=#{deleteFlag,jdbcType=TINYINT}

或者 where的写法,同样的sql语句却查询不到内容。

最后发现:

是#{deleteFlag,jdbcType=TINYINT}传值为null导致的。

也就是说,在左外连接查询中,条件为null也能默认查询出内容;(奇怪)

但是内连接或者其他写法,缺无法查询出内容,因为条件参数为null

思考:可能是sql在预编译的时候,left join 和 inner join 的区别 导致的差异。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息