获取两个不同复合主键之间的所有记录

问题描述 投票:0回答:1

我有一个表在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个主键之间的所有行

oracle composite-primary-key
1个回答
1
投票

一般模式是:

  • 如果一行的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两个子表达式。不要忘记在它们周围放置括号,以迫使ORs先于((< sub expression for <= >) AND (< sub expression for >= >)

如果可能,您可能希望尝试使用布尔代数来简化它。 (这次我只是懒得尝试这样做。而且这种模式更容易识别。)但是,由于这对于优化器来说是一个简单的任务,如果可能的话可能会改变它,并且无论如何都会有所改进,但它没有太大的好处除了可能更好(人类)的可读性之外。

© www.soinside.com 2019 - 2024. All rights reserved.