Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.30;
Скачать: CL | DM;

Вниз

Выборка из выборки   Найти похожие ветки 

 
Oleg_er   (2002-04-27 11:17) [0]

Можно ли как нибудь выполнить SQL запрос в выражении where которого был бы др SQL запрос, какой синтаксис должен быть?

К примеру на форме TQuery1, TQuery2 и что дальше?

Этот гиммор для ускорения (если выполнять конструкцию select *... from.... where in (select....) то оччень долго выполняется - сервак оччень тормозит, а так, было бы быстрее (я думаю))

есть какие нить идеи?


 
Johnmen ©   (2002-04-27 11:22) [1]

1.Сервак не может тормозить ввиду его отсутствия... :)
2.Поконкретнее - что надо получить ?


 
Oleg_er   (2002-04-27 11:27) [2]

сервак есть, но он файловый :(
1. выборка в общем
Tquery1.SQL.add("select elem, elem1, name from tbl where elem=5");

если пользователь пожелает узнать сколько их всего, то хотелось бы

2. TQuery2.SQL.add("select sum(elem1) from !TQuery1!")

Как это оформить?


 
Romkin ©   (2002-04-27 11:29) [3]

Посчитать кол-во строк в Query1, без всякого запроса


 
Johnmen ©   (2002-04-27 11:32) [4]

select count(*) from tbl where elem=5


 
Oleg_er   (2002-04-27 11:39) [5]

Это все понятно!

но пользователь может НЕ захотеть обобщенной выборки!
И поэтому ему необходимо все рабвно показать результат первой выборки, а потом он просто выделит, что ему надо сосчитать и тогда уже сосчитать... Так что нужно ДВА запроса, а второй мне хочется выполнить уже на локальной машине! Так что, выхода нет???


 
Johnmen ©   (2002-04-27 11:43) [6]

Если уж хочешь делать на уровне приложения, то используй фильтрацию.


 
Anatoly Podgoretsky ©   (2002-04-27 11:43) [7]

Ты не понял, сервера нет, оба запроса выполняются на твоей машине


 
Oleg_er   (2002-04-27 11:52) [8]

Запросы выполняются на моей машине, дык файл БД с сервака надо закатать еще на мою машину, Отсюда этот вопрос и возник!!!!
Не хочу закатывать на мою машину 2 раза один и тот же огромный файл!!!!!
Хочу разок закатать, сделать выборку, а потом уже из ЭТОЙ выборки сделать еще одну выборку!

Пример был абстактный, в реали гораздо!! обширнее


Неужели нельзя в дельфе это сделать??
В Фоксе к примеру есть такой синтаксис:
select fld1, fld2
into cursor cur
from tbl

а потом
select fld1
from cur

в итоге все выполняется гораздо быстрей!


 
Lusha ©   (2002-04-27 11:57) [9]

Если работаете с BDE, то нет ничего проще... Borland в таких случаях рекомендует использовать временные таблицы... Познакомьтесь с методом TTable.BatchMove...


 
Oleg_er   (2002-04-27 12:03) [10]

а так, напрямую значит нельзя? :-(
Получается:
1. Выполнить запрос
2. Скопировать в таблицу <- вот без этого.... :-(
3. выполнить запрос на основании созданной талицы
:-(((


 
Oleg_er   (2002-04-27 12:04) [11]

А индексы тоже сохраняться?


 
Lusha ©   (2002-04-27 12:10) [12]

>Oleg_er
А индексы тоже сохраняться?
Не должны.. :) А кто мешает их здесь же и создать... сразу после копирования...


 
Oleg_er   (2002-04-27 12:13) [13]

а это время.... и гиммор... :-(
жаль


 
Lusha ©   (2002-04-27 12:17) [14]

>Oleg_er (27.04.02 12:13)
а это время....
Но меньшее, чем прокачка по сети этой выборки... :)


 
Anatoly Podgoretsky ©   (2002-04-27 12:19) [15]

2. TQuery2.SQL.add("select sum(elem1) from !TQuery1!")
А это и не требует индексов :-)


 
Oleg_er   (2002-04-27 12:28) [16]

ну так это работать не будет!!! Это я написал от балды :)
Говорю, в реали запросик посложнее.. там иде вложенный запрос, но результат этого запроса не возможно дождаться.... поэтому и придумал перекачать часть актуальных данных к себе, а потом извращаться....


 
Johnmen ©   (2002-04-27 12:33) [17]

Пересмотри идеологию и откажись от вложенных запросов....


 
rvs ©   (2002-04-29 09:17) [18]

К сожалению, тоже страдаю такой бедой --> впрочем вызванной неграмотно,нелогично,безобразно организованной базой данных.
Приходится записывать промежуточные выборки в файл, затем использовать...

Если это то что надо, то рекомендую прислушаться к Lusha
(Ttable.createTable и Ttable.Batchmove)

Таким образом и реализуешь:
-->> select fld1, fld2
-->> into cursor cur
-->> from tbl
-->>а потом
-->>select fld1
-->>from cur


Удачи...
Ветал



 
Anatoly Podgoretsky ©   (2002-04-29 09:40) [19]

Oleg_er (27.04.02 11:52) rvs © (29.04.02 09:17)
И где ыы нашли такой чудесный синтаксис для select


 
rvs ©   (2002-04-29 09:45) [20]

--->>> Anatoly Podgoretsky

Foxpro батенька это Вам не ....


 
Anatoly Podgoretsky ©   (2002-04-29 10:01) [21]

rvs © (29.04.02 09:45)
Батенька, мы не в Foxpro программируем, в вопросе между прочим два типа баз и четко указан BDE
Дальше проясните по поводу синтаксиса в свете открывшихся фактов, ну если не трудно конечно, мне просто необходимо освежить свои знания LocalSql и спецификации SQL-92


 
rvs ©   (2002-04-29 10:12) [22]

--->>> Anatoly Podgoretsky

Прошу прощения, вероятно я неправильно понял вопроса...

Уточним:
Oleg_er вероятно программировал на Foxpro и спрашивает , как реализовать вышеприведенный код<> в Delphi .
Я вроде как ответил,что думаю по этому поводу.

Непонятно, о чем Вы вообще ??? :-)

С уважением ,Ветал.




 
Anatoly Podgoretsky ©   (2002-04-29 10:33) [23]

Можно использовать предикат INSERT INTO ... SELECT FROM и потом уже работать с этой таблицей, но лучше как сказал Johnmen © (27.04.02 12:33) пересмотреть идеологию.


 
Oleg_er   (2002-05-06 15:48) [24]

Спасибо всем!
Действительно - BatchMove тут самый удобоваримый вариант... (Более всего в русле задания)
Еще раз - спасибо большое..



Страницы: 1 вся ветка

Текущий архив: 2002.05.30;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.021 c
3-97213
Санёк
2002-05-10 11:48
2002.05.30
Ошибка, когда делаю backup...


3-97151
Саша
2002-05-06 12:37
2002.05.30
EDBEngineError Translate error.Value out of bounds


3-97137
Oleg_er
2002-04-27 11:17
2002.05.30
Выборка из выборки


7-97433
tester
2002-03-06 12:19
2002.05.30
работа с SUBST дисками


14-97394
PaRL
2002-04-20 20:54
2002.05.30
Оно самое.