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

时间:2019-04-10 23:43:36

标签: oracle composite-primary-key

我有一个表,该表在oracle中具有复合主键(具有多列的pk)。我正在运行SAMPLE查询以获取随机主键。

  

选择       col1,       col2,       col3,       第4列   从       桌子样品(0.1)   哪里       col1 ='XXXXX'   订购       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个主键之间的所有行

1 个答案:

答案 0 :(得分: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两个子表达式。别忘了在每个括号前后加上括号,以迫使OR在{(< sub expression for <= >) AND (< sub expression for >= >)之前。

如果可能的话,您可能想尝试使用布尔代数来简化它。 (这一次我懒得尝试这样做。而且这种方式更易于识别。)但是由于这是优化程序的一项简单任务,可能会对其进行更改,并且无论如何还是有希望的,因此没有太多好处可能不是更好的(人类)可读性。