Страница 1 из 2

выборка из заранее неизвестного множества таблиц

Добавлено: 21 июн 2005, 21:22
tss
Как сделать выборку из заранее неизвестного множества таблиц, притом что формирование динамически SQL не подходит по причине большой длины?

Добавлено: 21 июн 2005, 22:11
Merlin
Примерно так же, как пойти туда, не знаю куда, и принести то, не знаю что.

Добавлено: 22 июн 2005, 11:33
tss
Merlin писал(а):Примерно так же, как пойти туда, не знаю куда, и принести то, не знаю что.
Попробую объяснить иначе: select * from table1,table2,..tableN; таблиц может быть больше чем 255. Можно ли в принципе за один вызов сделать выборку из более чем 255 таблиц?

Добавлено: 22 июн 2005, 11:43
Лысый
И зачем надо такое декартово произведение?

Добавлено: 22 июн 2005, 11:51
Dmitry Beloshistov
Лысый писал(а):И зачем надо такое декартово произведение?
Как зачем? :shock: Чтобы завесить клиентов, загрузить сеть по максимуму, отправить в ступор сервер 8)
Кстати, если я правильно путаю, в SQL запросе не может быть более 255 таблиц.

Добавлено: 22 июн 2005, 12:48
kdv
судя по вопросу, понятно, что структура БД спроектирована ни в дуду.

Добавлено: 22 июн 2005, 12:50
hvlad
tss писал(а):select * from table1,table2,..tableN; таблиц может быть больше чем 255. Можно ли в принципе за один вызов сделать выборку из более чем 255 таблиц?
Нет

Добавлено: 22 июн 2005, 15:17
tss
Нет
Хоть один нормальный ответ. А с помощью ХП никак нельзя решить?

Добавлено: 22 июн 2005, 15:45
Ivan_Pisarevsky
Эдак вся моя боевая бд дважды в такой запрос уберется дважды и еще на хватит... :roll:

Добавлено: 22 июн 2005, 16:43
hvlad
tss писал(а):А с помощью ХП никак нельзя решить?
Никак. Я не знаю серверов, которые могут объединять более 256 таблиц в запросе и не знаю, зачем это нужно. Даже если представить себе, что такое возможно, я думаю план построения этого запроса будет строится очень долго

В IB\FB есть архитектурное ограничение на 255 контекстов, используемых в одном запросе - неважно, простой это SELECT, или вызов SP.
Контекст - это ссылка на таблицу (persistent или derived), агрегат

Добавлено: 22 июн 2005, 18:07
tss
hvlad писал(а):
tss писал(а):А с помощью ХП никак нельзя решить?
Никак. Я не знаю серверов, которые могут объединять более 256 таблиц в запросе и не знаю, зачем это нужно. Даже если представить себе, что такое возможно, я думаю план построения этого запроса будет строится очень долго

В IB\FB есть архитектурное ограничение на 255 контекстов, используемых в одном запросе - неважно, простой это SELECT, или вызов SP.
Контекст - это ссылка на таблицу (persistent или derived), агрегат
Если я спрошу иначе: можно ли написать процедуру которая бы выбрала по одной записи из 365 таблиц и вернула результат в виде набора данных?

Добавлено: 22 июн 2005, 20:15
hvlad
tss писал(а):Если я спрошу иначе: можно ли написать процедуру которая бы выбрала по одной записи из 365 таблиц и вернула результат в виде набора данных?
Одну процедуру - нет, т.к. можно написать только 255 селектов в одной процедуре.
С вызовом вложенных процедур - да.

Добавлено: 22 июн 2005, 23:22
Klyk
tss писал(а):Если я спрошу иначе: можно ли написать процедуру которая бы выбрала по одной записи из 365 таблиц и вернула результат в виде набора данных?
А может всё таки имеет пересмотреть структуру БД?
Что-то, я не могу себе представить как так можно было организовать атк БД чтоб нужно было делать такой Select?

Добавлено: 22 июн 2005, 23:22
Лысый
Вот это:
tss писал(а):Если я спрошу иначе: можно ли написать процедуру которая бы выбрала по одной записи из 365 таблиц и вернула результат в виде набора данных?
совсем не равно вот этому:
select * from table1,table2,..tableN;
даже если в каждой таблице по одной записи...

Добавлено: 23 июн 2005, 11:04
tss
структура БД определена не мной и менять я ее не могу. белее того, ее не нужно менять, не смотря ни на что она правильная. если бы каждый день нужно было сохранять порядка 100тыс. записей как бы кто поступил? то что на каждый день заводится новая таблица, для таких условий - это нормально.

Добавлено: 23 июн 2005, 11:38
SAMZ
tss писал(а):структура БД определена не мной и менять я ее не могу. белее того, ее не нужно менять, не смотря ни на что она правильная. если бы каждый день нужно было сохранять порядка 100тыс. записей как бы кто поступил? то что на каждый день заводится новая таблица, для таких условий - это нормально.
Может тебе Union попробовать

Добавлено: 23 июн 2005, 12:34
hvlad
tss писал(а):если бы каждый день нужно было сохранять порядка 100тыс. записей как бы кто поступил? то что на каждый день заводится новая таблица, для таких условий - это нормально.
Глупости (и\или тяжкое наследие времен dbf).
Единственное оправдание - лимит на р-р таблицы, но вы не его имели в виду, когда строили такую стр-ру.

Добавлено: 23 июн 2005, 14:14
Merlin
За год-то может и многовато будет, но на каждый день по таблице... Напомнило баянчик:

Если взрослого мыша
взять и, бережно держа,
напихать в него иголок
Вы получите ежа.
Если этого ежа,
нос заткнув, чтоб не дышал,
Где поглубже, бросить в речку
Вы получите ерша.
Если этого ерша,
головой в тисках зажав,
посильней тянуть за хвост то
Вы получите ужа.
Если этого ужа,
приготовив два ножа...
Впрочем, он наверно сдохнет,
Hо идея хороша!

Добавлено: 23 июн 2005, 14:37
Данилов Юрий
Согласен с предыдущими ораторами.
Но поскольку с точки зрения теории музыки и законов гармонии хуже уже дальше некуда, а Буха (не путать с Бахом) все устраивает то выкручиваться, собирая сначала за квартал, для чего пишется ХП Quarter(Quarter_No), а потом её уже дергать 4 раза из итожащей ХП.
IMHO на 92 таблицы контекстов хватит?

Добавлено: 23 июн 2005, 14:39
Slava Ekimov
tss писал(а):структура БД определена не мной и менять я ее не могу. белее того, ее не нужно менять, не смотря ни на что она правильная. если бы каждый день нужно было сохранять порядка 100тыс. записей как бы кто поступил? то что на каждый день заводится новая таблица, для таких условий - это нормально.
Ну вот у меня в небольшой базульке около 3 млн в одной таблице и чо?