我有一个表,该表在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个主键之间的所有行
答案 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 >= >)
之前。
如果可能的话,您可能想尝试使用布尔代数来简化它。 (这一次我懒得尝试这样做。而且这种方式更易于识别。)但是由于这是优化程序的一项简单任务,可能会对其进行更改,并且无论如何还是有希望的,因此没有太多好处可能不是更好的(人类)可读性。