Выполнить запрос для каждой пары значений из списка

#sql #oracle #oracle11g #oracle10g

#sql #Oracle #oracle11g #oracle10g

Вопрос:

У меня есть список пар значений, по которым я выполняю итерацию и запускаю запрос, скелет которого можно представить следующим образом.

список пар — ((x1,y1), (x2,y2), … (xn, yn)) xi, yi не все различны.

q — это запрос oracle, который возвращает одно значение для любого (xi, yi)

global_table — это таблица с одной строкой с

          id        col         deleted        
          1         Y            NULL
  

Несколько строк из «таблицы»:

          id        col         deleted          pid            did
          1        NULL           Y              25             1 
         81         N            NULL            NULL          149
         101        Y            NULL            22            149
         61         Y            NULL            NULL          NULL
  

Кроме того, существует УНИКАЛЬНОЕ ограничение на (pid, did, deleted) в таблице.

Запрос q выглядит следующим образом.

           select w.finalcol from
            (select coalesce(a.col,b.col,c.col,d.col) as finalcol from
               (select * from global_table where deleted is null) a
               left outer join
               (select * from table where deleted is null) b
               on b.pid is null and b.did is null
               left outer join
               (select * from table where deleted is null) c
               on c.pid is null and c.did = xi
               left outer join
               (select * from table where deleted is null) d
               on d.pid = yi and d.did = xi
               ) w
  

n = 60

n определяется другим запросом, который возвращает список пар значений.

            for element in (list of pairs)

                         q(xi,yi) (xi and yi might be used any number of times in the query)
  

Я пытаюсь уменьшить количество раз, когда я запускаю этот запрос. (от n раз до 1)

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

По умолчанию используется, когда

      select * from table where deleted is null
               and c.pid is null and c.did = xi

     select * from table where deleted is null
               and c.pid = yi and c.did = xi
  

не возвращайте никаких строк.

Я хочу, чтобы мой результат имел вид

 x1              y1           q(x1,y1)

x2              y2           q(x2,y2)

.

.

.

xn              yn           q(xn,yn)
  

(ни одна пара не должна быть опущена, учитывая, что несколько пар могут фактически отсутствовать в таблице)

Как мне добиться этого, используя только один запрос?

Спасибо

Комментарии:

1. Это q функция или тип SQL? Или что-то еще? Что определяет n ? Кроме того, регистр по умолчанию важен для предоставления решения. Если вы не предоставите нам всю информацию, мы не сможем вам помочь. Почему мы должны тратить наше время, пытаясь угадать, что вы на самом деле имеете в виду?

2. я добавил дополнительные детали в вопрос. Кроме того, чтобы получить значение по умолчанию, мне придется выполнить запрос один раз.

3. Однако вы не добавили выполняемый запрос, используемые таблицы или некоторые образцы данных… Как кто-либо может изменить несуществующий запрос, чтобы сделать это за вас?

4. добавлены используемые таблицы и запрос.

5. Я вижу, что на ваш вопрос до сих пор нет ответа. Возможно, это задается слишком «математическим» способом. Если вы все еще заинтересованы в получении вашего ответа, я предлагаю вам удалить свой вопрос и заменить его рабочим SQL-скриптом, который настраивает структуры таблиц, над которыми вы просите нас поработать, а затем самым простым способом объяснить, что вам нужно.