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

Вложенный SQL запрос в линк форме

Добавлено: 18 фев 2003, 14:50
GTHack
** преамбула -
хочу select * from ... where ... in (select ... from ...) в линке

** вступление -
необходимо в линк форму добавить поле которое в потоке в форму прототип не поступает, т.е. нужно самому в линке запросами по какому то входному параметру (который передается в прототип) спозиционироваться на нужной записи в нужной табличке и вывести рез-т.
задача как я думаю типичная и решенная многими здесь бывающими

** конкретика -
вот последовательность селектов которыми я в суппорте SQL получал необходимые мне записи

доступные параметры имеющиеся в потоке входящем в форму прототип это номер ДО и дата ДО, так что от них и пляшу (в tovn.pro это "основание" и "датаоснования")

в конце концов нужно получить выборку табличных частей всех накладных относящихся к этому ДО

select nrec from basedoc where ((датаоснования/==ddoc(noindex) and основание/==nodoc(noindex)));
дает 4000D82EA5603462h
select nrec from stepdoc where ((4000D82EA5603462h/==cbasedoc));
дает 400015F167097FEEh
select nrec from katsopr where ((400015F167097FEEh==cstepdoc));
дает несколько NRECO и по всем нужно пробежаться, вот один из них
select * from spsopr where ((4000B19E65184F8Ch==csopr));

каждый из них в SQL выполняется меньше секунды

************ ВОПРОС ****************** -
как это все в линк форме реализовать?

если делать несколько create view
1? то как выход одного view послать на вход другого (т.е. на один ДО один селект даст ссылки на накладные, а следующий селект должен по каждой накладной вывести материалы в ней содержащиеся)
2? если связывать в один view несколько таблиц то просто замучаешся ждать (таблицы очень большие) -> их объединененый вид будет делаться ужасно долго. (вышеописанными селектами очень быстренько)

подскажите плс мастера начинающему - как вы в таких ситуациях поступаете

Re: Вложенный SQL запрос в линк форме

Добавлено: 18 фев 2003, 14:58
Max_Fin
Не морочь голову

select * from
basedoc, stepdoc, katsopr
where
((
датаоснования == basedoc.ddoc(noindex) and
основание == basedoc.nodoc(noindex) and
basedoc.nrec == stepdoc.cbasedoc and
stepdoc.nrec == katsopr.cstepdoc and
katsopr.csopr == spsopr.csopr
));

Re: Вложенный SQL запрос в линк форме

Добавлено: 18 фев 2003, 14:59
Max_Fin
Опс, забыл еще одну табличку прописать

select * from
basedoc, stepdoc, katsopr, spsopr
where
((
датаоснования == basedoc.ddoc(noindex) and
основание == basedoc.nodoc(noindex) and
basedoc.nrec == stepdoc.cbasedoc and
stepdoc.nrec == katsopr.cstepdoc and
katsopr.csopr == spsopr.csopr
));

Re: Вложенный SQL запрос в линк форме

Добавлено: 18 фев 2003, 15:02
Max_Fin
Еще раз опс, видать день не мой сегодня
select * from
basedoc, stepdoc, katsopr, spsopr
where
((
датаоснования == basedoc.ddoc(noindex) and
основание == basedoc.nodoc(noindex) and
basedoc.nrec == stepdoc.cbasedoc and
stepdoc.nrec == katsopr.cstepdoc and
katsopr.nrec == spsopr.csopr
));

Re: Вложенный SQL запрос в линк форме

Добавлено: 18 фев 2003, 15:06
GTHack
такой запрос 100 лет будет крутиться

не подходит

я вот забыл написать что эту всю канетель я могу конечно на випе написать, но незнаю как из випа возвратить полученные данные форме то

Re: Вложенный SQL запрос в линк форме

Добавлено: 18 фев 2003, 15:18
GTHack
во блин - Макс - прошу прощенья,
щас запустил - все нормал прошло (6 сек)

я прото раньше запускал его и у меня sql повис нафиг

я думал это он от напряги повис, а на самом деле просто так :)

ну это конечно решение - спасибо
но вопросы остались
т.е. как передавать данные из одного view в другой и как из ВИПа передать выборку форме

Re: Вложенный SQL запрос в линк форме

Добавлено: 18 фев 2003, 15:52
Max_Fin
1) как передать данные из одного view в другой не вопрос объяви в одном переменную(ые) и по ней позиционируй нужную(ые) тебе таблу(ы)

2) обойтись без ВИПа можно, даже нужно. view объявляй внутри твоей присоединенной формы, для того чтобы получить данные из него и воспользуйся в форме
.{table 'vView.BaseDoc'
.}
3) да и в данной конкретном случае тебе достаточно одного view

Re: Вложенный SQL запрос в линк форме

Добавлено: 18 фев 2003, 19:47
m0p3e
C чего он будет 100 лет крутиться то? А индексы на что? :)

Re: Вложенный SQL запрос в линк форме

Добавлено: 07 мар 2003, 14:39
ecasoft
Мне кажется просто задающий вопрос не в курсе еще, что Галактический SQL - не настоящий SQl и величина описания запроса (в одним или нескольких SQL) практически не играет роли и не оказыват на время никакого влияния. SQL запрос (как это в настоящем SQL) строится динамически уже в процессе обращения пользователя к значениям полей таблицы, указанной в запросе. Из описанного запроса выдеются как бы строки, относящиеся к данной таблице и все связанные с ними (стоящие слева от знака == ).

Извините, если не правильно чего понял.

Да, я думаю в потоке известен вид ДО (ну закупка там, продажа или еще что). Поэтому
логичнее, если больба за скорость
получить из потока вид ДО и сделать запрос
по индексу:

select * from
basedoc, stepdoc, katsopr, spsopr
where
((

вид_до == basedoc.viddoc and // NEW
датаоснования == basedoc.ddoc and
основание == basedoc.nodoc and
basedoc.nrec == stepdoc.cbasedoc and
stepdoc.nrec == katsopr.cstepdoc and
katsopr.nrec == spsopr.csopr
));

Так будет намного быстрее, если очень много ДО в базе так как без индекса перебирается вся база до совпадения!!!