powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос на обобщение данных
11 сообщений из 11, страница 1 из 1
Запрос на обобщение данных
    #32242969
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеем ;)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
create table  "Insurant" 
(
     "CentId"         smallint not null,
     "InstId"         smallint not null,
     "NodeId"         smallint not null,
     "PersonId"       integer not null,
     "NameN"          varchar( 100 ),
     "PersonType"     integer not null,
    constraint  "pkInsurance"  primary key ( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" )
);

create table  "JuridPerson" 
(
     "CentId"         smallint not null,
     "InstId"         smallint not null,
     "NodeId"         smallint not null,
     "PersonId"       integer not null,
     "ChiefPostN"     varchar( 40 ),
    constraint  "pkJuridPerson"  primary key( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" ),
    constraint  "fkJuridPerson"  foreign key ( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" ) references  "Insurant" ( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" )
);

create table  "NaturPerson" 
(
     "CentId"     smallint not null,
     "InstId"     smallint not null,
     "NodeId"     smallint not null,
     "PersonId"   integer not null,
     "PasspNo"    varchar( 20 ),
  constraint  "pkNaturPerson"  primary key( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" ),
  constraint  "fkNaturPerson"  foreign key ( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" ) references  "Insurant" ( "CentId" ,  "InstId" ,  "NodeId" ,  "PersonId" )
);

необходимо реализовать самый простенький запрос: "Вся инфа по всем Insurant'ам".
Кроме как
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select *
from  "Insurant"  i left outer join
( "NaturPerson"  n full join  "JuridPerson"  j
on (n. "CentId" =j. "CentId" ) and
    (n. "InstId" =j. "InstId" ) and
    (n. "NodeId" =j. "NodeId" ) and
    (n. "PersonId" =j. "PersonId" )
)
on (
      (i. "CentId" =j. "CentId" ) and
      (i. "InstId" =j. "InstId" ) and
      (i. "NodeId" =j. "NodeId" ) and
      (i. "PersonId" =j. "PersonId" )
    )
or (
      (i. "CentId" =n. "CentId" ) and
      (i. "InstId" =n. "InstId" ) and
      (i. "NodeId" =n. "NodeId" ) and
      (i. "PersonId" =n. "PersonId" )
   )
order by i. "CentId" ,i. "InstId" ,i. "NodeId" ,i. "PersonId" 

ничего лучшего не получилось :(
Может это можно более-менее человечей забалабенить? Опять же вся ета беда на натуральных планах:
Код: plaintext
1.
PLAN SORT (JOIN (I NATURAL,JOIN (J NATURAL,N NATURAL)))

Представляю сколько он начнет отрабатывать на надцати тысячах записей Ж8-/
...
Рейтинг: 0 / 0
Запрос на обобщение данных
    #32246487
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может у тебя "натуральный" план из-за сортировки? Если нет - значит неправильно индексы построены, если да - тогда так и должно быть.
...
Рейтинг: 0 / 0
Запрос на обобщение данных
    #32246573
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю из-за логического условия или т.е. or .
OR редко когда быстро бывает.
...
Рейтинг: 0 / 0
Запрос на обобщение данных
    #32248769
Igor Elyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ет точно .... стоит поставить OR и 90% вероятность получения натурального плана :(
...
Рейтинг: 0 / 0
Запрос на обобщение данных
    #32248821
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мо тогда есть идеи как перестроить сам сиквел?
...
Рейтинг: 0 / 0
Запрос на обобщение данных
    #32248836
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без изменения структуры таблиц никак
...
Рейтинг: 0 / 0
Запрос на обобщение данных
    #32248840
VictorKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всегда стремись к простоте. У тебя 2 одинаковые по сотаву таблицы. Сделай одну и добаь поле тип персоны. Будет гораздо прощее.
...
Рейтинг: 0 / 0
Запрос на обобщение данных
    #32248846
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у него три таблицы :)
подумай, может одна действительно лучше будет :)
...
Рейтинг: 0 / 0
Запрос на обобщение данных
    #32248879
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гы... Дык весь прЫкол-то в том, что была одна. Эт недавно растрояйцили ее Ж8-/
Мо действительно: Лучшее - враг хорошего?... А как же тогда буквари, нормальные формы и пр. капиталистический заговор?
...
Рейтинг: 0 / 0
Запрос на обобщение данных
    #32248883
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тебе скорость важнее или НФ? ты уж определись :)
а зачем разделили-то?
...
Рейтинг: 0 / 0
Запрос на обобщение данных
    #32248961
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я привел тока ж ключевые поля, так сказать, для примеру... А ваще их там...
Просто в одной таблице info о ф/л, а в другой по ю/л. А важна, конечно, скорость. Но и БД не на последнем месте. При куче незаюзанных полей - пухнет, как на дрожжах. Ну и куча других ньюансов...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос на обобщение данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]