Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.05.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.006 c
1-97351
dlK
2002-05-20 11:57
2002.05.30
При открытии проекта происходит подсвечивание клавиши и пункта ме


1-97346
Jony
2002-05-17 18:14
2002.05.30
Как на пункт меню и на кнопку повесить вывод окна Help?


1-97255
koks
2002-05-20 11:09
2002.05.30
Вопрос по меню.


14-97407
Sergo
2002-04-22 09:40
2002.05.30
Снова о больном :)


3-97119
Oleg_er
2002-05-06 07:26
2002.05.30
В чем ошибка? - ругается на несовместимость типов!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский