首页 > 解决方案 > 通过有限数量的不同值进行选择

问题描述

我正在尝试按一列的不同值对选择进行分块。就像给我前五个不同值的所有行。或者给我一列接下来五个不同值的所有行。

我有一个像这样的 VBS_DOCUMENT 表:

PK    T_DOCUMENT
1     1
2     1
3     1
4     3
5     3
6     3
7     5
8     5
9     6
10    7
SELECT * FROM VBT_DOCUMENT 
WHERE T_DOCUMENT IN (SELECT DISTINCT T_DOCUMENT FROM VBT_DOCUMENT LIMIT 2 OFFSET 2);

但后来我得到这个错误:

1235 - 这个版本的 MariaDB 还不支持 'LIMIT & IN/ALL/ANY/SOME 子查询'

PK    T_DOCUMENT
7     5
8     5
9     6

标签: mysqlmariadbdistinctlimit

解决方案


在 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          |

在 DB Fiddle 上查看

注意:当您使用 LIMIT 时,您还应该定义一个确定性的 ORDER BY 子句。否则,根据执行计划,您可能会得到意想不到的结果。


推荐阅读