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

Обсуждение

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

а потом вот так:
select * from func()
Неизвестный
04.12.2006, 07:05
общий
это ответ
Здравствуйте, Юра!

В самом простои случае
Select * from (Select * from T1). Только не все реализации SQL могут поддерживать такую конструкцию. У Вас СУБД какая ?
Неизвестный
04.12.2006, 10:35
общий
это ответ
Здравствуйте, Юра!
Если я правильно понял, делаем запрос, получаем результирующий набор, потом из него делаем выборку. Элементарно, первый результат загоняем во временную таблицу... и из нее выбераем

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

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

select * from #temp

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

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

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

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

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

С уважением, Игорь
Форма ответа