mysql - 通过有限数量的不同值进行选择
问题描述
我正在尝试按一列的不同值对选择进行分块。就像给我前五个不同值的所有行。或者给我一列接下来五个不同值的所有行。
我有一个像这样的 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
解决方案
在 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 时,您还应该定义一个确定性的 ORDER BY 子句。否则,根据执行计划,您可能会得到意想不到的结果。
推荐阅读
- react-native - 反应映射依赖问题
- postgresql - Postgresql 无法启动。重新启动正在重置授予 /var/run/postgresql/ 的权限
- javascript - mobx 中的 @observable 和 @observable.ref 修饰符有什么区别?
- go - 结构嵌入:不能引用未导出的名称 os.fileStat
- android - 在回收站视图中投射异常?
- node.js - 找不到模块“猫鼬”,即使它存在
- java - 无法将 JDBC-Hikari 连接到我的 Micronaut 应用程序
- pyspark - spark-submit 不选择项目结构的模块和子模块
- r - 在遍历列时校正密度图
- sql - IS_ROLEMEMBER 在 SQL Server 2012 或 2008R2 中是否可用