Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Цикл с первой до последней записи таблицы в SQL. СРОЧНО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
KAMBI
Гость





СообщениеДобавлено: Вт Май 13 2003 18:50    Заголовок сообщения: Цикл с первой до последней записи таблицы в SQL. СРОЧНО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Ответить с цитатой

Как пройти таблицу SQL c первой записи до последней (построить цикл) ?
Вернуться к началу
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Вт Май 13 2003 22:14    Заголовок сообщения: Объясни, а на хрена???? Я не вижу ни одной задачи, которой такое надо. Пересмотри свои взгляды на SQL (-) Ответить с цитатой

-
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
U-gene
Гость





СообщениеДобавлено: Ср Май 14 2003 09:46    Заголовок сообщения: Не соглашусь. Есть достаточно стандартная задача: по построить на основании таблицы с единичными фактами таблицу с нарастающим Ответить с цитатой

Там цикл (в том или ином виде) является оптимальным решением. Можно даже сказать, что без цикла (в том или ином виде) там никак не обойтись. Средствами SQL это решается с использованием курсоров.
Вернуться к началу
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Ср Май 14 2003 21:08    Заголовок сообщения: Это решается через GROUP BY, HAVING и вложенные запросы. Скорость будет просто немерянная. Проверено миллион раз (-) Ответить с цитатой

-
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Valera
Гость





СообщениеДобавлено: Чт Май 15 2003 06:24    Заголовок сообщения: Про курсоры почитай (-) Ответить с цитатой

-
Вернуться к началу
U-gene
Гость





СообщениеДобавлено: Чт Май 15 2003 08:40    Заголовок сообщения: Интересно...+ Ответить с цитатой

Что-то с трудом верится. ИМХО цикл в том или ином виде обязательно вылезет.

А можно привести пример для таблицы хотя бы с 2-3мя строками? Чтоб оно сделало так

исходная таблица (ID, факт)
1 1
2 3
3 5


результат (ID, нарастающий итог)
1 1
2 4
3 9

,а потом объяснить, как этот запрос с GROUP и с поздазапросом (НЕ МЕНЯЯ ЕГО!) можно применить к таблице с произвольным и заранее неизвестным числом строк?
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Чт Май 15 2003 17:55    Заголовок сообщения: Попробуй (+) Ответить с цитатой

SELECT ид0 AS ид, SUM(факт1) AS итог
FROM
(SELECT табл0.ид AS ид0, табл0.факт AS факт0, табл1.ид AS ид1, табл1.факт AS факт1
FROM таблица AS табл0, таблица AS табл1
WHERE табл0.ид <= табл1.ид)
GROUP BY ид0;
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Чт Май 15 2003 17:59    Заголовок сообщения: Sorry, знак в другую сторону (вместо "меньше" надо "больше") (-) Ответить с цитатой

-
Вернуться к началу
U-gene
Гость





СообщениеДобавлено: Пт Май 16 2003 08:40    Заголовок сообщения: Век живи и тд... :)...- Ответить с цитатой

Smile
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Пт Май 16 2003 12:50    Заголовок сообщения: Re: Век живи и тд... Ответить с цитатой

Вообще-то эта проблема шире, чем сканирование SQL-таблицы и, тем более, вопроса нарастающих итогов. Проблема в том, что SQL полагается способным решить все вопросы, связанные с таблицами. И по синтаксису действительно трудно найти задачу, для которой не подберется запрос, решаюший его. Но решение многих, если не большинства, заключается не в автоматическом отыскании (эффективного) алгоритма (а это объявляется целью языка SQL), а в большей скорострельности сервера базы данных по сравнению с клиентским компьютером. Здесь я не согласен с and3008 13-05-2003 23:14. Пересматривать нужно не ожидания от SQL, а сам SQL. Вот пример плохого использования SQL:

пусть есть таблицы таблИнфо(идСправ0, идСправ1), таблСправ0(ид, имя), таблСправ1(ид, имя). Как SQL рекомендует расшифровать кода в таблИнфо? Вот как:

SELECT таблСправ0.имя AS имя0, таблСправ1.имя AS имя1
FROM таблИнфо, таблСправ0, таблСправ1
WHERE таблИнфо.идСправ0=таблСправ0.ид AND таблИнфо.идСправ1=таблСправ1.ид

(или вариант с JOIN). И это действительно выполняется крайне быстро (особенно при наличии индексов по полям "ид"). Но где это выполняется? Это выполняется на сервере! А затем (огромная!) таблица (имя0, имя1) передается по медленным каналам связи. А клиенту это нужно не на сервере, а на своем компьютере. И получается, что по времени отклика было быстрее перекачать справочники и информационную таблицу, и на месте у клиента собрать требуемую таблицу! Конечно, можно сказать, что можно сделать так:

SELECT таблСправ0.ид, таблСправ0.имя
FROM таблСправ0
WHERE таблСправ0.ид IN (SELECT DISTINCT таблИнфо.идСправ0); с сохранением в локальной таблице

затем

SELECT таблСправ1.ид, таблСправ1.имя
FROM таблСправ1
WHERE таблСправ1.ид IN (SELECT DISTINCT таблИнфо.идСправ1); с сохранением в локальной таблице

затем

SELECT * FROM таблИнфо; с сохранением в локальной таблице

А уж затем задать локально

SELECT таблСправ0.имя AS имя0, таблСправ1.имя AS имя1
FROM таблИнфо, таблСправ0, таблСправ1
WHERE таблИнфо.идСправ0=таблСправ0.ид AND таблИнфо.идСправ1=таблСправ1.ид


Но при таком варианте где *автоматическая* оптимизация? Есть и другие нестыковки, но не буду перечислять все, так как это достаточно крупная тема.
Вернуться к началу
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Сб Май 17 2003 10:53    Заголовок сообщения: Во многом согласен (+) Ответить с цитатой

Согласен, что нельзя тупо доверять оптимизатору запросов. Согласен, что много зависит от задачи.
Но я не согласен, что надо писать такие запросы, результат которых огромный и тянется на клиента. В 90% случаев это не нужно. Никто не будет просматривать более 100 записей. Исключения, естественно, составляют отчеты.

Лично я против переноса бизнес-логики на клиента. Это чревато ошибками и нестабильностью. По возможности максимальная часть логики должна выполняться на сервере.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Борис
Гость





СообщениеДобавлено: Сб Май 17 2003 12:01    Заголовок сообщения: И все-таки... (+) Ответить с цитатой

Возражения против переноса бизнес-логики на клиента основаны на предположении о том, что все (не просто все, а абсолютно все) операции может сделать сервер. Такое предположение верно вообще, но не в частных случаях его реализации. А эти частные случаи составляют абсолютно все реализации и состоят в том, что вся требуемая работа в целом делится на типы (работа с БД, управление подключенной аппаратурой, формирование аналитических графиков и т. д.), и на каждый тип создается *отдельный* сервер, которые, кстати, часто разносятся (по разным причинам) на разные, порой далеко отстоящие друг от друга, машины. Поэтому вопрос коммуникаций крайне важен для эффективной работы в целом, а он просто "не замечается" при реализации сервера БД. Полагается, что это в принципе другая задача, не имеющая отношения к собственно вопросам управления данными. Но это не так. Сами по себе данные не нужны, если их нельзя эффективно использовать, а использование их как раз и является задачей их предоставления *другим* программам. Такой "другой" программой может быть в частности просто программа просмотра данных начальником, в которой действительно просмотр более ста записей не работа, а мучение. Но такой программой может быть и генератор фильма, и генератор чертежа, да что угодно. И для них нужны будут огромные таблицы (команд, данных, объектов и т. д.). Мы, кстати, постоянно видим результат такого неучета требований быстрого отклика системы в целом. Это то, что каждая программа, использующая мало-мальски сложные данные, имеет свою базу данных, хотя очевидно, что оптимальным решением было бы задачу хранения этих данных отдать серверу БД, а самой программе решать исключительно вопросы алгоритмов обработки. Но сегодняшние решения требуют или размещать все на одном компьютере, или делать собственную БД для прикладной программы.

PS. Эта тема вышла за рамки исходного вопроса, поэтому предлагаю завершить ее обсуждение, либо вынести как новую тему.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...