Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL запрос.Помогите оптимизировать 
:(
    Опции темы
Lunatikus
Дата 30.7.2007, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



MS SQL Serv 2000

Задачу выполняю с переборами в запросах ADOQuery.Помогите,пожалуйста,кто может сказать,как можно оптимизировать это действие,используя один запрос.
Есть три таблицы:
Универы:
----uni------art-----
uni-наименование универсального артикула(один универ может иметь несколько артикулов)
art-наименование артикула

Остатки:
----art------ost----
ost-остаток на текущий день

Календарь:
---data-------uni----ost------
data-дата(по всем дням подряд,начиная с начала года)
Т.е. в календаре отображаются остатки по всем универсальным артикулам по дням

Задача:подгрузить в последнюю таблицу остатки на текущий день(в таблице "Остатки" всегда хранятся остатки на текущий день)
Что у меня есть:
1)
Код

Есть ADOQ.SQL.text:='SELECT uni,sum(ost) FROM Универы,Остатки WHERE art=art GROUP BY uni';

Тут я получаю все универы с текущими остатками.Теперь надо эти универы подлить в календарь:
Код

ADOQ1.SQL.text:='UPDATE Календарь SET ost=:ost WHERE data=now() AND uni=:uni';

while not ADOQ.eof do
  begin
  ADOQ1.parameters.parambyname('ost').value:=ADOQ.fields.fieldbyname('ost').asfloat;
  ADOQ1.parameters.parambyname('uni').value:=ADOQ.fields.fieldbyname('uni').asstring;
  ADOQ.next;
  ADOQ1.execSQL;
  end;

Как видно,я использую переборы в полученных наборах данных,чтобы обновить данные в календаре.Можно ли составить единый запрос,чтобы так не усложнять?


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
DimW
Дата 30.7.2007, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 5
Всего: 44



а почему именно апдейт календаря, вот так нельзя?

Код

insert into календарь
(SELECT now(), uni, sum(ost) FROM Универы,Остатки WHERE art=art GROUP BY uni)

PM MAIL ICQ   Вверх
Lunatikus
Дата 30.7.2007, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



так появятся дубляжи,отличающиеся только остатками.У меня ключ по data,uni.Потому то мне надо просто заменить значение всех остатков по универсальным артикулам на текущий момент времени.Завтра будет на следующий и т.д.Можно ли сделать так чтобы Апдейт изменял не одну а какое то множество записей?Сдается мне,что нет,но может,кто-то знает.Речь идет не об установке в условии диапазона IN.Ведь заменять-то надо на разные значения, а не на одно.

может я ошибаюсь,и дубляжей не будет,а произойдет просто замена?тогда будет замечательно.

Это сообщение отредактировал(а) Lunatikus - 30.7.2007, 13:31


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
DimW
Дата 30.7.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 5
Всего: 44



вроди так, но пока до конца не уверен:

Код

update календарь t1
   set t1.ost = (SELECT sum(t3.ost) FROM Универы t2, Остатки t3 WHERE t2.art=t3.art and t2.uni = t1.uni)
where t1.data=now()
  and t1.uni in (SELECT distinct t4.uni FROM Универы t4, Остатки t5 WHERE t4.art=t5.art)


в оракле похожий запрос отработал адыкватно

Это сообщение отредактировал(а) DimW - 30.7.2007, 14:15
PM MAIL ICQ   Вверх
Lunatikus
Дата 30.7.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



SQL Serverу не нравится именование T1,T2...пишет что "syntax error near t1".Перепроверил запрос-все правильно написал.В SQL Servere вообще можно так именовать?


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
DimW
Дата 30.7.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 5
Всего: 44



Цитата(Lunatikus @  30.7.2007,  14:29 Найти цитируемый пост)
В SQL Servere вообще можно так именовать?

ну вобщето это называется алиасам таблицы, а каких тараканов мелкомягкие навыдумывали я не вкурсе, я не поклонник ms sql. 

PM MAIL ICQ   Вверх
pseud
Дата 30.7.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



попробуй так
Код

update календарь AS t1



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Lunatikus
Дата 31.7.2007, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



Теперь ругается на AS "syntax error near AS in line 1".Его,по ходу,только с полями можно использовать.Попробовал без альясов,испольщуя оригинальные имена.Не столь универсально,но в данном примере возможно.Получилось,однако возникла другая проблема...
новый вопрос


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1042 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.