Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2016, 09:31   #1
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию Ускорить запрос

Добрый день, подскажите можно ли как то ускорить выполнение запроса.
Выполняется в среднем за 48-50 секунд.
NCI_Pord_12, spr_DogPlan, spr_dogovors это запросы к серверу.

Код:
Select NCI_Pord_12.name_12
 from NCI_Pord_12
 where  NCI_Pord_12.kod_12 in (select spr_dogplan.kod_12 from spr_dogplan where  spr_DogPlan.fk_id_dog in (select id_dog from spr_dogovors where regnumsap='2140216/0918Д'))
Kot070 вне форума Ответить с цитированием
Старый 21.06.2016, 09:41   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,050
По умолчанию

А так:
Код:
Select DISTINCT NCI_Pord_12.name_12
  from NCI_Pord_12, spr_dogplan, spr_dogovors
  where NCI_Pord_12.kod_12=spr_dogplan.kod_12 AND
        spr_DogPlan.fk_id_dog=spr_dogovors.id_dog AND
        spr_dogovors.regnumsap='2140216/0918Д'
DISTINCT может и не надо, проверь. Еще бы несколько селектов с ин вложил - часами бы ждал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.06.2016, 09:59   #3
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию

Спасибо работает гораздо быстрее, но почему то разные наборы результирующих данных.
В моем 128 (их столько и нужно), в Вашем 60.
Без Distinct в Вашем 1536
Kot070 вне форума Ответить с цитированием
Старый 21.06.2016, 10:11   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,407
По умолчанию

Код:
select NCI_Pord_12.name_12
from NCI_Pord_12
inner join ( select distinct kod_12
             from spr_dogovors, spr_dogplan  
             where spr_DogPlan.fk_id_dog in = spr_dogovors.id_dog
               and regnumsap='2140216/0918Д' 
          ) as spr on spr.kod_12 =NCI_Pord_12.kod_12
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 21.06.2016 в 10:14.
evg_m вне форума Ответить с цитированием
Старый 21.06.2016, 10:13   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,050
По умолчанию

Distinct показывает только уникальные наименования в результирующей выборке. В твоем случае он не уникальны
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.06.2016, 10:25   #6
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию

Я знаю что Distinct выбирает только уникальные записи.

Код:
select NCI_Pord_12.name_12
from NCI_Pord_12
inner join ( select distinct kod_12
             from spr_dogovors, spr_dogplan  
             where spr_DogPlan.fk_id_dog in = spr_dogovors.id_dog
               and regnumsap='2140216/0918Д' 
          ) as spr on spr.kod_12 =NCI_Pord_12.kod_12
Выходит ошибка:
Оператор In без () в выражении запроса 'spr_DogPlan.fk_id_dog in = spr_dogovors.id_dog and spr_dogovors.regnumsap='2140216/0918Д'
Kot070 вне форума Ответить с цитированием
Старый 21.06.2016, 10:41   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,050
По умолчанию

Убери in оттуда, описка же
Код:
where spr_DogPlan.fk_id_dog = spr_dogovors.id_dog
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.06.2016, 11:13   #8
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию

Не заметил, но почему то все равно кол-во записей 62 вместо 128 нужных мне.Что может быть не так?
Kot070 вне форума Ответить с цитированием
Старый 21.06.2016, 11:16   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,050
По умолчанию

Нормально представь структуру таблиц и связи. И нормально опиши что такое 128 нужных мне. Еще лучше - контрольный пример данных и что из них нужно получить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.06.2016, 11:33   #10
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию

Это запросы к серверу и связей как таковых нет.
128 это общее кол-во услуг в различных отделах по данному договору.
Из скрина видно что они могут повторятся, вот точно так же мне нужно чтобы получилось
Изображения
Тип файла: jpg 123.jpg (55.0 Кб, 129 просмотров)
Kot070 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить программу nikitosoleil Общие вопросы C/C++ 2 04.10.2015 15:20
Объединение больших таблиц - как ускорить запрос? supermike SQL, базы данных 13 30.11.2014 20:51
Ускорить процесс Victor1963 Помощь студентам 0 15.11.2011 12:06
Ускорить процесс. Victor1963 Общие вопросы Delphi 3 23.06.2011 21:51
Ускорить работу с БД Poltev86 БД в Delphi 2 25.05.2010 09:46