Получить все записи между двумя разными составными первичными ключами - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть таблица, которая имеет составной первичный ключ (рк с несколькими столбцами) в оракуле.Я выполняю запрос SAMPLE для получения случайных первичных ключей.

ВЫБРАТЬ col1, col2, col3, col4 ИЗ таблицы SAMPLE (0.1) WHERE 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 Ответ

1 голос
/ 11 апреля 2019

Итак, общий шаблон будет выглядеть следующим образом:

  • Если 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 >= >).

. Вы можете попробовать использовать булеву алгебру, чтобы упростить это, если это возможно. (На этот разЯ просто слишком ленив, чтобы попытаться сделать это. И модель более узнаваема в этом смысле.) Но поскольку это простая задача для оптимизатора, которая может изменить его, если это возможно, и обещает в любом случае, от этого не так много пользы, кроме, возможно,лучшая (человеческая) читабельность.

...