Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2017, 09:59   #1
Super_Saimon
 
Регистрация: 28.09.2017
Сообщений: 7
По умолчанию Помогите с запросом в Oracle pl/sql

Всем добрый день! Столкнулся с проблемой, вроде элементарной, но для меня непостежимой... Сутьзайду из далека чтоб было понятней. Intro,так сказать) существует база данных на серверной части. В ней есть таблица, содержащая всего две записи: первая-id договора, вторая- id объекта, к которому этот договор заключен. Есть вьюха, юзаящая эту таблицу для заполнения экранной формы на стороне клиента - общий список объектов, где у каждого объекта есть свои параметры, в которые и входят эти договора(есть 4 типа договоров, но за одним объектом числиться может только один экземпляр любого типа, т.е. видов-хоть все четыре, но по одному экземпляру). Связь идет такова, что привязка идет объекта строго к договору(это важно, и в этом вся загвоздка) У договора есть потомки(доп.соглашения). Так вот, ближе к телу... Стоит задача через вьюху выводить на клиент последний, актуальный по дате документ(или договор, или его потомка-доп.соглашение). И тут засада-я не пойму как не нарушая условие что привязка идет строго объект к договору в базе... То есть, связь в базе всегда к родителю объекта, в клиенте подменить на его потомка, если тот имеет дату окончания намного позже родителя.
сам запрос из этой вьюхи(смысла кидать всю вьюху не вижу, т.к. именно в этом куске вьюхи вся проблема. Этот запрос отвечает за заполнение полей в клиенте у объекта его параметров определенного договора). И этот запрос выводит только договора, не видит доп.соглашения,в relations_lan_rco нет доп.соглашений


select e.*
from v$all_rentcontracts e, relations_lan_rco b1
where e.vco_id = 10
and e.current_ = 'Y'
and b1.rco_id = e.rco_id


Где таблица relation_lan_rco является таблицей, где и лежат объекты и договора(родители).
Vco_id - тип документа. один из четырех.
current_ - через case определяет договор еще действующий, или нет.
Rco_id - id договора.
Во вьюхе v$all_rentcontracts храняться, исходя из названия, все догвора и потомки, доп.соглашения, без учета объектов, к которому они принадлежат. Скопом.
Во вьюхе v$all_rentcontracts создал две переменных- current_rco_id(последний по дате потомок у определенного договора),
max_parent(признак по которому определяют что последнее-потомок, или договор по дате у определенного объекта. Null-parent, not Null- child). Моя версия запроса недалеко ушла( одна из версий):

select e.*
from v$all_rentcontracts e,
relations_lan_rco b1
where e.vco_id = 10
and e.current_ = 'Y'
and b1.rco_id = (case
when e.max_parent is null then e.rco_id
else e.current_rco_id
end)


как не меняя таблиц, и вьюх исправить этот запрос??? Это условие, которое я не могу нарушать. И не могу нарушить связь между объектом и договором в базе. Как сделать подмену. Мне подсказали что не хватает по факту строки пере b1.rco_id = (case... этой строки e.rco_id = e.current_rco_id. Но я не въеду как это может быть??? У них банально значения не равны. Единственное что у них общее-это rco_parent(признак родитель(null), потомок(not null, rco_id-id родителя).

Последний раз редактировалось Super_Saimon; 28.09.2017 в 10:17.
Super_Saimon вне форума Ответить с цитированием
Старый 28.09.2017, 11:46   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Много слов, а ясности мало. Приведи пример с десятком строк из этих таблиц и что в результате видится
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.09.2017, 11:59   #3
Super_Saimon
 
Регистрация: 28.09.2017
Сообщений: 7
По умолчанию

А что приводить? Есть выборка из этого запроса по двум полям,грубо говоря, к примеру: b1.lan_id 261146
e.rco_id 17020. Где 17020 это родитель. А если юзать мой запрос и окажется что потомок позже-то rco_id будет пустым
Super_Saimon вне форума Ответить с цитированием
Старый 28.09.2017, 12:11   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Как хочешь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.09.2017, 12:41   #5
Super_Saimon
 
Регистрация: 28.09.2017
Сообщений: 7
По умолчанию

В смысле "Как хочешь"? Я с телефона сижу. У меня на китайце Oracle 10 не стоит. И я привел реальный результат работы по запросу в обоих случаях у конкретного объекта.
Super_Saimon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с запросом в SQL komarov90 Помощь студентам 12 13.12.2016 09:55
Помогите с SQL запросом. Mat Bourn Помощь студентам 15 21.05.2015 20:51
помогите с запросом sql sery80 SQL, базы данных 8 18.11.2014 21:29
Помогите с SQL-запросом! lordaleksej БД в Delphi 2 03.12.2009 22:55
SQL. Помогите с запросом. fluxion БД в Delphi 2 27.12.2007 08:01