Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 187
от 09.12.2006, 20:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 392, Экспертов: 42
В номере:Вопросов: 1, Ответов: 4


Вопрос № 65441: Здравствуйте уважаемые эксперты. Возможно ли сформировать на SQLе такой запрос "А", который бы осуществлял поиск среди записей полученных в результате выполнения другого запроса "В". Иными словами должен выполнятся поиск среди...

Вопрос № 65.441
Здравствуйте уважаемые эксперты.
Возможно ли сформировать на SQLе такой запрос "А", который бы осуществлял поиск среди записей полученных в результате выполнения другого запроса "В". Иными словами должен выполнятся поиск среди результатов предыдущего поиска.
Заранее всем признателен за любую оказанную помощь.
Отправлен: 04.12.2006, 03:32
Вопрос задал: Юра (статус: 2-ой класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Grigory
Здравствуйте, Юра!
Если речь идет о SQL Server, то это можно сделать следующим образом: создать функцию, которая будет возвращать таблицу, а потом выбирать из результатов, возвращенных функцией.
Например вот так:
create function func()
returns table
as
return (select * from table1)

а потом вот так:
select * from func()
Ответ отправил: Grigory (статус: 6-ой класс)
Ответ отправлен: 04.12.2006, 07:03

Отвечает: Синельников Сергей
Здравствуйте, Юра!

В самом простои случае
Select * from (Select * from T1). Только не все реализации SQL могут поддерживать такую конструкцию. У Вас СУБД какая ?
Ответ отправил: Синельников Сергей (статус: 1-ый класс)
Ответ отправлен: 04.12.2006, 07:05

Отвечает: Santana
Здравствуйте, Юра!
Если я правильно понял, делаем запрос, получаем результирующий набор, потом из него делаем выборку. Элементарно, первый результат загоняем во временную таблицу... и из нее выбераем

declare #temp (список полей с типами)

insert into #temp (список полей)
select * from worktable

select * from #temp

Ответ отправил: Santana (статус: 8-ой класс)
Ответ отправлен: 04.12.2006, 10:35

Отвечает: Игорь Елизаров
Здравствуйте, Юра!
Да, конечно это можно.
результат запроса это та же таблица и обращаться к ней можно как к любой таблице и даже устанавливать связи. Это иногда очень полезно.

Вот пример:
select * from a1 inner join (select id, cost from b) tt on a1.id=tt.id

то есть выполняется запрос к таблице B , этот запрос именуется tt
и потом используется в запросе к таблице A1 (связь по полю id )

Этот подход можно использовать для поэтапного отлаживания запросов.
Отлаживаем вначале вложенный запрос, а потом основной.

В хранимых процедурах можно в рамках одной процедуры выполнять несколько запросов, сохранять данные во временных таблицах, использовать переменные и т.д.
Поэтому если запросы очень сложные, то нагляднее сделать несколько запросов в хранимой процедуре (проще для восприятия)

С уважением, Игорь
Ответ отправил: Игорь Елизаров (статус: 8-ой класс)
Ответ отправлен: 04.12.2006, 23:47


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное