mysql关键字的坑

MySQL5.7关键字点这里

SQL(Structured Query Language)是第四代语言,和第三代语言(例如C++,Java)一样,也有自己的关键字,而不同数据库的关键字也不尽相同,上周使用mysql5.7版本的时候就遇到了一个坑。

SELECT count(order_no)
FROM order_info
WHERE
1=1
and
status = 0
and
type = 0

在mysql库中直接查询数据得出正确结果,下面是mysql映射文件中的写法:

 

<select id="*****" resultMap="BaseResultMap">
        SELECT  
count(order_no)

FROM order_info WHERE 1 = 1 <if test="status != null"> and status = #{status,jdbcType = TINYINT} </if> <if test="type != null "> and type = #{type,jdbcType=TINYINT} </if> </select>

 

 

然后页面得出的结果比实际结果大很多,结果发现了没有执行type的条件,只执行了status,原因不明确,因为以前遇到过关键字错误,觉得应该是type的问题,于是改代码:

 

 

<select id="*****" resultMap="BaseResultMap">
        SELECT  
	count(order_no)
        FROM order_info
        WHERE
        1 = 1
        <if test="status != null">
            and status = #{status,jdbcType = TINYINT}
        </if>
        <if test="type != null ">
            and `type` = #{type,jdbcType=TINYINT}
        </if>
    </select>

发现结果还是不对。于是找问题,找了一会儿发现好像没有执行status条件了,然后去查了mysql5.7的关键字,果然,status也是关键字,改成了:

 

 

<select id="*****" resultMap="BaseResultMap">
        SELECT  
	count(order_no)
        FROM order_info
        WHERE
        1 = 1
        <if test="status != null">
            and `status` = #{status,jdbcType = TINYINT}
        </if>
        <if test="type != null ">
            and `type` = #{type,jdbcType=TINYINT}
        </if>
    </select>

结果正确!

 

在设计数据库的时候尽量考虑到关键字因素,有时候一个小小的字段坑起来,连bug都不知道在哪里出来的。
 

MySQL中,DISTINCT关键字用于查询结果中去除重复的行。然而,使用DISTINCT可能会遇到一些,下面是一些常见的问题和解决方法: 1. DISTINCT和ORDER BY一起使用时,可能会导致结果不符合预期。这是因为DISTINCT会对所有的列进行去重,而ORDER BY则是对所有的列进行排序。如果查询结果中有多个列,并且只想对其中某一列进行去重,可以使用子查询来实现。 2. DISTINCT和NULL值一起使用时,可能会导致结果不符合预期。在MySQL中,NULL值被认为是不同的值,所以DISTINCT会将NULL值也算作不同的行。如果想要将NULL值排除在外,可以使用IS NOT NULL条件来过滤。 3. DISTINCT和JOIN操作一起使用时,可能会导致结果不符合预期。当使用JOIN操作时,DISTINCT会对连接后的结果进行去重。如果连接的表中存在重复的数据,那么DISTINCT可能无法去除所有的重复行。可以考虑使用子查询或者GROUP BY来解决这个问题。 4. DISTINCT和LIMIT一起使用时,可能会导致结果不符合预期。在MySQL中,LIMIT会在查询结果中应用限制条件。如果使用了DISTINCT,并且LIMIT的数量小于去重后的结果数量,那么可能会返回不完整的结果。可以考虑使用子查询来解决这个问题。 总之,在使用MySQL中的DISTINCT关键字时,需要注意上述的一些,并根据具体情况选择合适的解决方法来得到正确的结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游语

对你有帮助,可以请我喝杯奶哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值