oracle - 获取两个不同复合主键之间的所有记录
问题描述
我有一个表,它在 oracle 中有一个复合主键(具有多列的 pk)。我正在运行 SAMPLE 查询以获取随机主键。
SELECT col1, col2, col3, col4 FROM table SAMPLE (0.1) WHERE col1 = 'XXXXX' ORDER BY col2, col3, col4;
示例输出将类似于
XXXXX 1 YYY A
XXXXX 2 ZZZ a
XXXXX 3 AAA b
XXXXX 4 BBB c
XXXXX 5 CCC c
XXXXX 6 DDD c
XXXXX 7 EEE i
现在,我想获取前 2 个主键和接下来的 2 个主键之间的所有行
解决方案
那么一般模式是:
- 如果
col1
一行的值小于比较值,col1
则该行“较低”,即如果已排序,则更靠前。 - 如果
col1
一行的值等于 的比较值,col1
并且col2
该行的值小于比较的值,col2
则该行是“较低的”,即,如果已排序,则更靠前。 - ..
什么会导致如下表达式:
col1 < '?'
OR col1 = '?'
AND col2 < '?'
OR col1 = '?'
AND col2 = '?'
AND col3 < '?'
OR col1 = '?'
AND col2 = '?'
AND col3 = '?'
AND col4 < '?'
OR col1 = '?'
AND col2 = '?'
AND col3 = '?'
AND col4 = '?'
(我没有使用你的价值观,老实说它们让我感到困惑。适当地替换问号。)
另一个方向的模式是模拟的。只是做>
出来<
。然后AND
是两个子表达式。不要忘记将括号括起来,以强制OR
s 在 ( (< sub expression for <= >) AND (< sub expression for >= >)
.
如果可能,您可能想尝试使用布尔代数来简化它。(这一次我只是懒得尝试这样做。而且这种模式更容易识别。)但是由于这对优化器来说是一个简单的任务,如果可能的话,它可能会改变它并且无论如何都有希望,因此没有太多好处除了可能更好的(人类)可读性之外。
推荐阅读
- react-native - 如何制作使用方法而不是嵌入到父视图中调用的自定义警报对话框?
- javascript - jQuery中的函数激活次数过多
- kubernetes - Kubernetes:关注 kubectl 代理日志
- php - 如何在 Laravel Eloquent 中使用空参数创建 whereIn 查询构建器
- java - @DiffIgnore 和 @ShallowReference 在回调中导致奇怪的行为
- java - 内存不足错误,即使堆内存没有完全使用
- mysql - 根据年份和月份获取数据
- python - Python中while循环问题的执行
- javascript - 创建 OPTION 元素和函数
- java - 如何使用触发器动态创建表