Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 通过有限数量的不同值进行选择_Mysql_Mariadb_Distinct_Limit - Fatal编程技术网

Mysql 通过有限数量的不同值进行选择

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子句中使用子查询并将其与基表联接

我试图通过一列的不同值来进行分块选择。比如给我前五个不同值的所有行。或者给我一列中接下来五个不同值的所有行

我有一个类似于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子句中使用子查询并将其与基表联接:

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'