Select 由有限数量的不同值
Select by a limited number of distinct values
我正在尝试按一列的不同值对选择进行分块。就像给我前五个不同值的所有行一样。或者给我一列接下来五个不同值的所有行。
我有一个 table 这样的 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 - This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
PK T_DOCUMENT
7 5
8 5
9 6
在 FROM 子句中使用您的子查询并将其与基 table:
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 子句。否则,根据执行计划,您可能会得到意想不到的结果。
WITH 可用于 MySQL8.0(或 MariaDB 10.2.1)
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'
我正在尝试按一列的不同值对选择进行分块。就像给我前五个不同值的所有行一样。或者给我一列接下来五个不同值的所有行。
我有一个 table 这样的 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 - This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
PK T_DOCUMENT
7 5
8 5
9 6
在 FROM 子句中使用您的子查询并将其与基 table:
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 子句。否则,根据执行计划,您可能会得到意想不到的结果。
WITH 可用于 MySQL8.0(或 MariaDB 10.2.1)
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'