Вопрос № 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