learning_record_doc/mysql/MySQL踩坑记录.md

29 lines
864 B
Markdown
Raw Normal View History

2022-08-11 18:10:37 +08:00
## MySQL踩坑记录
### 【1235】 This version of MySQL doesnt yet support LIMIT & IN/ALL/ANY/SOME subquery
+ ##### 含义:这版本的 MySQL 不支持使用 LIMIT 子句的 IN/ALL/ANY/SOME 子查询
+ ##### 问题SQL
我想要查找凭证列表中的前十条记录
```mysql
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子查询就可以了
```mysql
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)
```