|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.09.2017, 09:59 | #1 |
Регистрация: 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. |
28.09.2017, 11:46 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 19,042
|
Много слов, а ясности мало. Приведи пример с десятком строк из этих таблиц и что в результате видится
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
28.09.2017, 11:59 | #3 |
Регистрация: 28.09.2017
Сообщений: 7
|
А что приводить? Есть выборка из этого запроса по двум полям,грубо говоря, к примеру: b1.lan_id 261146
e.rco_id 17020. Где 17020 это родитель. А если юзать мой запрос и окажется что потомок позже-то rco_id будет пустым |
28.09.2017, 12:11 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 19,042
|
Как хочешь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
28.09.2017, 12:41 | #5 |
Регистрация: 28.09.2017
Сообщений: 7
|
В смысле "Как хочешь"? Я с телефона сижу. У меня на китайце Oracle 10 не стоит. И я привел реальный результат работы по запросу в обоих случаях у конкретного объекта.
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите с запросом в 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 |