Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом  [new]
orzON
Member

Откуда:
Сообщений: 136
Привет всем!
Имеется запрос:

SELECT dbo.T_org.kod_org, dbo.T_licence.number_lic, dbo.T_licence.date_top, dbo.T_licence.date_bott, dbo.T_licence.n_prik, dbo.T_licence.date_prik,
dbo.T_licence.date_can, dbo.T_licence.date_res, dbo.T_licence.date_priost, dbo.T_licence.reason, dbo.T_kart.number_kart, dbo.T_kart.kod_auto,
dbo.T_kart.d_top, dbo.T_kart.d_bott, dbo.T_kart.d_pass, dbo.T_kart.prikaz, dbo.T_kart.blank, dbo.T_auto.gos_nomer, dbo.T_auto.dop_nomer,
dbo.T_auto.model, dbo.T_auto.tonn, dbo.T_auto.god_vip, dbo.T_auto.date_arenda, dbo.T_auto.date_ekspluat
FROM dbo.T_org INNER JOIN
dbo.T_licence ON dbo.T_org.kod_org = dbo.T_licence.kod_org INNER JOIN
dbo.T_kart ON dbo.T_licence.number_lic = dbo.T_kart.num_lic INNER JOIN
dbo.T_auto ON dbo.T_org.kod_org = dbo.T_auto.kod_org
WHERE (dbo.T_org.kod_org = 9999)

В результате: строки выводятся нужные, но почему то по 3 штуки каждой.
Помогите исправить ошибку!
27 май 09, 11:47    [7233317]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36800
А почему их там должно быть меньше?
27 май 09, 11:48    [7233325]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
orzON
Member

Откуда:
Сообщений: 136
каждая запись дублируется 3 раза!
27 май 09, 11:54    [7233384]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
orzON
каждая запись дублируется 3 раза!

Это не ошибка сервера. Это ошибка вашей логики.
Значит одной записи в одной таблице соответствует несколько записей в дргуой таблице
27 май 09, 11:56    [7233398]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Не кричите Картинка с другого сайта.

Попробуйте ответить на вопрос Гавриленко Сергея Алексеевича...
27 май 09, 11:57    [7233413]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Azvaal
Member

Откуда: Москва
Сообщений: 215
Glory
orzON
каждая запись дублируется 3 раза!

Это не ошибка сервера. Это ошибка вашей логики.
Значит одной записи в одной таблице соответствует несколько записей в дргуой таблице


Другого ответа и не может быть )

Пример, вы выбираете людей из справочника и их адрес, а у каждого по 3 адреса :)
27 май 09, 12:26    [7233637]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
orzON
Привет всем!
Имеется запрос:

SELECT dbo.T_org.kod_org, dbo.T_licence.number_lic, dbo.T_licence.date_top, dbo.T_licence.date_bott, dbo.T_licence.n_prik, dbo.T_licence.date_prik,
dbo.T_licence.date_can, dbo.T_licence.date_res, dbo.T_licence.date_priost, dbo.T_licence.reason, dbo.T_kart.number_kart, dbo.T_kart.kod_auto,
dbo.T_kart.d_top, dbo.T_kart.d_bott, dbo.T_kart.d_pass, dbo.T_kart.prikaz, dbo.T_kart.blank, dbo.T_auto.gos_nomer, dbo.T_auto.dop_nomer,
dbo.T_auto.model, dbo.T_auto.tonn, dbo.T_auto.god_vip, dbo.T_auto.date_arenda, dbo.T_auto.date_ekspluat
FROM dbo.T_org INNER JOIN
dbo.T_licence ON dbo.T_org.kod_org = dbo.T_licence.kod_org INNER JOIN
dbo.T_kart ON dbo.T_licence.number_lic = dbo.T_kart.num_lic INNER JOIN
dbo.T_auto ON dbo.T_org.kod_org = dbo.T_auto.kod_org
WHERE (dbo.T_org.kod_org = 9999)

В результате: строки выводятся нужные, но почему то по 3 штуки каждой.
Помогите исправить ошибку!

Чтобы найти причину, просто посмотрите кол-во записей, удовлетворяющих запросу, в каждой из таблиц :-) Благо их тут немного, так что займёт сей процесс не более 5-10 минут.
27 май 09, 12:43    [7233765]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
orzON
Member

Откуда:
Сообщений: 136
Если из запроса убрать таблицу T_auto, то он правильно выводит результаты (3 записи). Как тогда сформировать запрос, чтобы выводилось 3 нужные записи?
27 май 09, 13:06    [7233974]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
orzON
Если из запроса убрать таблицу T_auto, то он правильно выводит результаты (3 записи). Как тогда сформировать запрос, чтобы выводилось 3 нужные записи?

Ну дык "из запроса убрать таблицу T_auto"
27 май 09, 13:13    [7234071]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
orzON
Member

Откуда:
Сообщений: 136
SELECT dbo.T_org.kod_org, dbo.T_licence.number_lic, dbo.T_licence.date_top, dbo.T_licence.date_bott, dbo.T_licence.n_prik, dbo.T_licence.date_prik,
dbo.T_licence.date_can, dbo.T_licence.date_res, dbo.T_licence.date_priost, dbo.T_licence.reason, dbo.T_kart.number_kart, dbo.T_kart.kod_auto,
dbo.T_kart.d_top, dbo.T_kart.d_bott, dbo.T_kart.d_pass, dbo.T_kart.prikaz, dbo.T_kart.blank, dbo.T_auto.gos_nomer, dbo.T_auto.dop_nomer,
dbo.T_auto.model, dbo.T_auto.tonn, dbo.T_auto.god_vip, dbo.T_auto.date_arenda, dbo.T_auto.date_ekspluat
FROM dbo.T_org INNER JOIN
dbo.T_licence ON dbo.T_org.kod_org = dbo.T_licence.kod_org INNER JOIN
dbo.T_kart ON dbo.T_licence.number_lic = dbo.T_kart.num_lic INNER JOIN
dbo.T_auto ON dbo.T_org.kod_org = dbo.T_auto.kod_org AND dbo.T_kart.kod_auto = dbo.T_auto.gos_nomer
WHERE (dbo.T_org.kod_org = 9999)

попробовал вот так, вроде получилось
27 май 09, 13:13    [7234072]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36800
orzON
Если из запроса убрать таблицу T_auto, то он правильно выводит результаты (3 записи). Как тогда сформировать запрос, чтобы выводилось 3 нужные записи?
И какие записи из T_Auto - нужные?
27 май 09, 13:14    [7234077]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
orzON
Member

Откуда:
Сообщений: 136
Гавриленко Сергей Алексеевич
orzON
Если из запроса убрать таблицу T_auto, то он правильно выводит результаты (3 записи). Как тогда сформировать запрос, чтобы выводилось 3 нужные записи?
И какие записи из T_Auto - нужные?


dbo.T_kart.kod_auto = dbo.T_auto.gos_nomer
27 май 09, 13:21    [7234169]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
orzON
Гавриленко Сергей Алексеевич
orzON
Если из запроса убрать таблицу T_auto, то он правильно выводит результаты (3 записи). Как тогда сформировать запрос, чтобы выводилось 3 нужные записи?
И какие записи из T_Auto - нужные?


dbo.T_kart.kod_auto = dbo.T_auto.gos_nomer

Ну так это же не серверная ошибка, если вы указали неправильное условие соединения
27 май 09, 13:23    [7234189]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36800
orzON
Гавриленко Сергей Алексеевич
orzON
Если из запроса убрать таблицу T_auto, то он правильно выводит результаты (3 записи). Как тогда сформировать запрос, чтобы выводилось 3 нужные записи?
И какие записи из T_Auto - нужные?


dbo.T_kart.kod_auto = dbo.T_auto.gos_nomer
И как это никто не догадался, черт побери?
27 май 09, 13:24    [7234193]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
orzON
Member

Откуда:
Сообщений: 136
Вы и натолкнули меня на правильное решение))
27 май 09, 13:27    [7234221]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
orzON
ON dbo.T_org.kod_org = dbo.T_auto.kod_org AND dbo.T_kart.kod_auto = dbo.T_auto.gos_nomer
Подозреваю, что у автора в модели БД имеются транзитивные зависимости
если мои опасения верны, рекомендую обратиться в форум Проектирование БД с просьбой помочь исправить модель
27 май 09, 13:45    [7234394]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить