learning_record_doc/mysql/MySQL踩坑记录.md
2022-08-11 18:10:37 +08:00

864 B
Raw Blame History

MySQL踩坑记录

【1235】 This version of MySQL doesnt yet support LIMIT & IN/ALL/ANY/SOME subquery

  • 含义:这版本的 MySQL 不支持使用 LIMIT 子句的 IN/ALL/ANY/SOME 子查询
  • 问题SQL

    我想要查找凭证列表中的前十条记录

    SELECT * FROM voucher where id IN 
    (select DISTINCT(id) from voucher where is_deleted = 0 and DATE_FORMAT(v.bookkeeping_date,'%Y-%m') >= '2022-08' LIMIT 0,10)
    
  • 原因
    • 原因在于子查询三层嵌套在 in或 not in 中使用了 limit
  • 解决办法

    将我们的SQL在进行嵌套一层绕开limit子查询就可以了

    SELECT * from voucher where id IN 
    (select id from (select DISTINCT(id) from voucher where is_deleted = 0 and DATE_FORMAT(v.bookkeeping_date,'%Y-%m') >= '2022-08' LIMIT 0,10) vtable)