Mysql 通过有限数量的不同值进行选择
我试图通过一列的不同值来进行分块选择。比如给我前五个不同值的所有行。或者给我一列中接下来五个不同值的所有行 我有一个类似于VBS_文档的表格:Mysql 通过有限数量的不同值进行选择,mysql,mariadb,distinct,limit,Mysql,Mariadb,Distinct,Limit,我试图通过一列的不同值来进行分块选择。比如给我前五个不同值的所有行。或者给我一列中接下来五个不同值的所有行 我有一个类似于VBS_文档的表格: PK T_DOCUMENT 1 1 2 1 3 1 4 3 5 3 6 3 7 5 8 5 9 6 10 7 但是我得到了这个错误: 1235-此版本的MariaDB尚不支持“LIMIT&IN/ALL/ANY/SOME子查询” 在FROM子句中使用子查询并将其与基表联接
PK T_DOCUMENT
1 1
2 1
3 1
4 3
5 3
6 3
7 5
8 5
9 6
10 7
但是我得到了这个错误:
1235-此版本的MariaDB尚不支持“LIMIT&IN/ALL/ANY/SOME子查询”
在FROM子句中使用子查询并将其与基表联接:
SELECT t.*
FROM (
SELECT DISTINCT T_DOCUMENT
FROM VBT_DOCUMENT
ORDER BY T_DOCUMENT
LIMIT 2 OFFSET 2
) x
JOIN VBT_DOCUMENT t on t.T_DOCUMENT = x.T_DOCUMENT
结果:
| PK | T_DOCUMENT |
| --- | ---------- |
| 7 | 5 |
| 8 | 5 |
| 9 | 6 |
注意:使用LIMIT时,还应定义一个确定性ORDERBY子句。否则,根据执行计划,您可能会得到意外的结果。WITH可用于MySQL8.0(,或) 输出:
# pk, t_document
'7', '5'
'8', '5'
'9', '6'
是的,它似乎工作得很好。你甚至正确地添加了我忘记的顺序:-)还没有:-)看。您可以尝试是否有一个版本的MariaDB支持我自己在选择限制中的试用?如果没有办法在子查询中使用
LIMIT
,另一种方法是使用JOIN
,请参阅:。连接可以被视为具有变体的替代。。。
| PK | T_DOCUMENT |
| --- | ---------- |
| 7 | 5 |
| 8 | 5 |
| 9 | 6 |
WITH abc as (SELECT DISTINCT T_DOCUMENT FROM VBS_DOCUMENT LIMIT 2 OFFSET 2)
SELECT * FROM VBS_DOCUMENT WHERE T_DOCUMENT IN (select * from abc);
# pk, t_document
'7', '5'
'8', '5'
'9', '6'