Форум: "Базы";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];
ВнизSQL запрос SQL запроса для компонента ADOQuery! Найти похожие ветки
← →
Helen (2002-01-29 15:47) [0]Уважаемые мастера!
Возникли трудности с использованием результатов одного SQL запроса в другом SQL запросе.
Один компонент ADOQuery1 отвечает за некоторую выборку. Как выбрать неповторяющиеся (DISTINCT) значения одного поля этой выборки(компонента ADOQuery1).
Если использовать функцию Format(), то проиллюстрируйте пожалуйста примером как именно.
Заранее спасибо! :)))
← →
Delirium (2002-01-29 16:01) [1]Этот вопрос надо было в "Базах данных" задавать, я тебе уже в "Потрепаться" написал как сделать через временную таблицу.
← →
Helen (2002-01-29 16:26) [2]Я конечно извиняюсь, что опять "не туда попала", просто мечусь в поисках решения...:)))
>ADOQuery1:
>Select ... into #tmp from ...
>ADOQuery2:
>Select distinct ... from #tmp
>Единственное условие, ADOQuery1 и ADOQuery2 должны работать >через один и тот-же ADOConnection, так они попадут в одну >сессию на MSSQL.
Я конечно извиняюсь за то что не поняла, но объясни мне поподробней как у них может быть один ADOConnection, если результатом первой выборки (из основной базы) будет временная таблица. А ADOQuery2 должен ссылаться на первый запрос а не снова коннектиться к основной базе.
Значит у ADOQuery2 в свойстве DataSource через компонент DataSource нужно "сослаться" на ADOQuery1? У меня так не получилось.
Заранее спасибо.
← →
Delirium (2002-01-29 18:05) [3]Нет тут ничего, связанного с DataSource, просто что-бы делать запросы с резульатов их ведь надо где-то хранить. Поэтому создаём временную таблицу, помешаем туда результаты твоего запроса и обращаемя к ней из другого ADOQuery (а можно и из того-же, ведь MSSQL может исполнять несколько инструкций подряд). Вот и всё :)
← →
Helen (2002-01-29 20:12) [4]for Delirium:
Спасибо :). Ты все правильно говоришь. Но можно ли как-нибудь без пересохранения этой информации на диске, выборки рискуют быть большими. Это "не лишнее" время и место :). Я встречала в умной книжке упоминание что так сделать можно, но конкретно как именно (ссылка запроса на запрос) не понятно.
Заранее всё равно спасибо.
← →
wicked (2002-01-29 20:17) [5]2 Helen ©
используй view или запросы из запроса (вложенных запросов).... только учти, способ хранения данных во временной таблице имеет свои преимущества: скорость обращения к промежуточным данным, например.... преимущества view и запросов - меньше места занимают....
← →
Delirium (2002-01-29 20:23) [6]Погоди, ты понимаешь, что для того чтобы выполнить SQL запрос нужен сервер? С локальной выборкой, "оторванной" от СУБД можно делать лишь элементарные вещи - Filter,например, а для чего-то более сложного без сервера не обойтись. К тому-же "...без пересохранения этой информации на диске, выборки рискуют быть большими...", если говорить затратах ресурсов, то на временные таблицы тратится память и дисковое пространство сервера, а не клиента, да и по скорости ты его врятли "обгонишь". Ведь единственная альтернатива - экспорт в какой-нибудь DBF, индексация и обработка на клиенте, что как правило оч.долго. Да и прокачать по сети миллионную выборку, дело не одной секунды :)
← →
Alex Y (2002-01-30 06:08) [7]2 Helen
К сожалению Delirium прав, выборка в tQuery хранится в памяти и к ней ты можешь обратиться только через методы tQuery, а это построчный проход, фильтрация и пр. Можно переадресовать весь запрос другому tQuery, но выбрать из него не получится.
Соответственно решать тебе, либо создавать временную таблицу, либо обходить выборку построчно и отказаться от второго запроса.
← →
Shirson (2002-01-30 09:00) [8]А не проще во второй квери просто совместить оба запроса?
← →
Helen (2002-01-30 12:29) [9]for Shirson:
Тоже пробовала. Первый запрос формируется по ходу программы в зависимости от выбранных "параметров". "Совместить" красиво не получилось :), если только потом фильтром.
for Delirium:
Спасибо! Ты самый активный помощник :).
← →
Севостьянов Игорь (2002-01-30 16:04) [10]А почему бы не делать все действия в SQL запросе ?
DISTINCT ?
Или вложенные запросы или группировку ?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c