powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / SQL для отчета если есть связи 1:N
10 сообщений из 10, страница 1 из 1
SQL для отчета если есть связи 1:N
    #32174978
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос,
есть ситуация

таблица EMP
имеются связи 1:N c таблицами LANG & CERT
те если я хочу выбрать данные одним запросом то получаю в результате декартово произведение таблицы LANG и CERT

как лучше подойти к построению отчета с такими данными , выбирать несколькими запросами , или еще както ?

PS
(может у кого естьссылки где описываються подобные вопросы и ответы ? )
...
Рейтинг: 0 / 0
SQL для отчета если есть связи 1:N
    #32175217
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что нужно получить и какова структура таблиц?
...
Рейтинг: 0 / 0
SQL для отчета если есть связи 1:N
    #32175273
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне надо в отчете для каждой записи из таблицы
EMP вывести ссылающиеся на него записи из LANG
и ссылающиеся на него записи из CERT

create table EMP (
EMP_SysNo GSYSNO not null,
EMP_ClockNo int not null,
constraint PK_EMP primary key (EMP_SysNo)
)

create table LANG (
LANG_SysNo numeric(18) not null,
LANG_EMPRef CODERFR not null,
LANG_No smallint not null,
LANG_LangRFR SH_RFR not null,
LANG_GradeFlagRFR IFLAG not null,
constraint PK_LANG primary key (LANG_SysNo),
constraint AK_LANG_AK_LANG unique (LANG_EMPRef, LANG_No)
)

create table CERT (
CERT_SysNo GSYSNO not null,
CERT_EMPRef CODERFR not null,
CERT_Type SH_RFR not null,
CERT_EducForm_FlagRFR IFLAG not null,
CERT_BDate IRBIS_DATE null,
CERT_EDate IRBIS_DATE null,
CERT_IssueDate IRBIS_DATE null,
CERT_ProfessRFR SH_RFR not null,
CERT_Class_FlagRFR IFLAG not null,
CERT_IdNo STR35 null,
CERT_Issuer LONG_DESC not null,
CERT_EducRFR SH_RFR not null,
CERT_AcrdLevel smallint null,
CERT_Qualification STR70 not null,
CERT_Course smallint null,
CERT_SpecialityDiploma LONG_DESC null,
CERT_DirecTrain LONG_DESC null,
CERT_Amount VAL null,
CERT_isBasic ILOGF not null,
CERT_EMPTEAAssc CODERFR null,
constraint PK_CERT primary key (CERT_SysNo)
)
...
Рейтинг: 0 / 0
SQL для отчета если есть связи 1:N
    #32175679
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извини, совсем запутался. Задам вопросы последовательно:

1. В результирующей таблице все записи из подчиненных таблиц (LANG, CERT) должны ссылаться на EMP (если так, то в чем смысл подобного объединения?) или последовательно , например CERT->LANG->EMP (в таком случае конечно все просто:
select * from EMP e,CERT c,LANG l
where e.EMP_SysNo = l.LANG_SysNo and l.LANG_SysNo = c.CERT_SysNo and ...) ?

2. Нужно, чтобы в одной строке результирующей таблицы были поля всех трех исходных (EMP.*,LANG.*,CERT.*) ?

3. Связь нужна *= или = ?
...
Рейтинг: 0 / 0
SQL для отчета если есть связи 1:N
    #32175956
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смысл этих таблиц

есть человек - EMP
он знает несколько языков - EMP left join LANG on LANG_EMPRef = EMP_SysNo
он имеет несколько сертификатов - EMP left join CERT on CERT_EMPRef = EMP_SysNo

надо отчет вида

1 ... Иванов........английский............................. техникум
.........................русский..................................школа
.........................украинский.............................институт
2.....Петров ....

если написать

FROM EMP left join LANG on LANG_EMPRef = EMP_SysNo
left join CERT on CERT_EMPRef = EMP_SysNo
получаю декартово произведение строк из таблицы CERT на LANG

наверное же уже есть какойто устоявшийся подход к формированию такого рода отчетов
...
Рейтинг: 0 / 0
SQL для отчета если есть связи 1:N
    #32176804
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>FROM EMP left join LANG on LANG_EMPRef = EMP_SysNo
>left join CERT on CERT_EMPRef = EMP_SysNo
>получаю декартово произведение строк из таблицы CERT на LANG
Совершенно справедливо, ведь таблицы LANG и CERT в таком запросе не связаны.

>надо отчет вида
>1 ... Иванов........английский............................. техникум
>.........................русский..................................школа
>.........................украинский.............................институт

Из этого отчета следует, что Иванов изучал английский в техникуме, русский в школе и т.д. или что-то другое?

Для нормального запроса нужно, что бы все участвыющие в нем таблицы были логически связаны. Какова связь между LANG и CERT?
...
Рейтинг: 0 / 0
SQL для отчета если есть связи 1:N
    #32177172
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том то и дело что никакой

и этого запроса следует что человек английский , русский и украинский
а учился он в школе, техникуме и институте,

те это два набора дополнительных данных,
и которые связаны только тем что описывают одного и того же человека
...
Рейтинг: 0 / 0
SQL для отчета если есть связи 1:N
    #32177757
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все-таки почему именно одним запросом?

>те это два набора дополнительных данных,
>и которые связаны только тем что описывают одного и того же человека
Так и зачем их выводить вместе? Объединение несвязанных таблиц и дает декартово произведение.

С помощью union и подобных ухищрений можно получить вывод вида:
.......Иванов........английский..............................NULL
.......Иванов........русский..................................NULL
.......Иванов........украинский.............................NULL
.......Иванов........NULL......................................техникум
.......Иванов........NULL......................................школа
.......Иванов........NULL......................................институт

но только для одной записи из таблицы EMP, иначе будет что-то типа

.......Иванов........английский..............................NULL
.......Иванов........русский..................................NULL
.......Иванов........украинский.............................NULL
.......Петров........китайский...............................NULL
.......Петров........малайский...............................NULL
.......Иванов........NULL......................................техникум
.......Иванов........NULL......................................школа
.......Иванов........NULL......................................институт
...
Рейтинг: 0 / 0
SQL для отчета если есть связи 1:N
    #32177821
_solo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
юнион конечно хорошо, только что белать когда колво и типы полей из этих дополнительных таблиц не совпадают
...
Рейтинг: 0 / 0
SQL для отчета если есть связи 1:N
    #32178142
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имелось в виду, что надо склеивать все таблицы, соответственно в первой части все поля CERT будут пустые, во второй у LANG.
Еще раз - объединять эти данные в одном запросе нет смысла, любой генератор отчетов обработает ситуацию с двуми подчиненными наборами данных. Если генеришь отчет сам, придется делать два запроса и выдергивать данные из них.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / SQL для отчета если есть связи 1:N
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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