Выбрать из вложенного запроса в Oracle 9i - PullRequest
1 голос
/ 30 октября 2008

В MS SQL 2005 или T-SQL вы можете сделать что-то вроде:

SELECT T.NAME, T.DATE 
  FROM (SELECT * FROM MyTable WHERE ....) AS T

Мне не удалось попробовать аналогичный SQL в БД Oracle 9i. В MS SQL вложенный SQL обрабатывается как временное / динамическое представление, создаваемое на лету и уничтожаемое впоследствии. Как я могу сделать подобное в Oracle? Я действительно не хочу создавать представление, чтобы сделать это.

Ответы [ 3 ]

6 голосов
/ 30 октября 2008

Я полагаю, что он задыхается от "как".

SELECT T.NAME, T.DATE 
  FROM (SELECT * FROM MyTable WHERE ....)  T

должно работать.

3 голосов
/ 30 октября 2008

Единственное, что вам нужно изменить - это удалить ключевое слово "AS". Oracle использует это только для псевдонимов столбцов (например, SELECT фиктивный AS some_name FROM dual), хотя даже тогда он вам не нужен.

0 голосов
/ 31 октября 2008

Если вам действительно нужно создать временный физический набор результатов, то вы сделаете это с помощью предложения факторинга подзапроса:

with t as
(SELECT /*+ materliaze */ 
        *
 FROM   MyTable
 WHERE ....)
SELECT T.NAME, T.DATE 
FROM T
/

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

Вы должны иметь возможность просто отбросить AS, и Oracle логически объединит встроенное представление с главным запросом, если это будет безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...