#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-скриптом, который настраивает структуры таблиц, над которыми вы просите нас поработать, а затем самым простым способом объяснить, что вам нужно.