Как определить временные табличные значения в подзапросе в Oracle

#sql #oracle #subquery

#sql #Oracle #подзапрос

Вопрос:

Я подхожу к этой проблеме с точки зрения, отличной от DBA, поскольку у меня нет разрешений на создание новых таблиц для базы данных. Я пытаюсь обойти это, используя подзапрос в Oracle, подобный этому коду sudo:

 With temptable as ('col1name', 'col2name', 1,'a',2,'b')
Select * from temptable where col1name = 1
  

С помощью temptable, который выглядит как

 Col1name | Col2name
1           a
2           b
  

И выводится строка 1. Я знаю, что это не самый простой способ сделать это, но это все, что я могу придумать, чтобы выполнить свою задачу, пока я не смогу заставить администратора одобрить новую таблицу. Я много искал, но не могу найти ответ. Есть ли простой способ определить временные табличные данные таким образом?

Ответ №1:

Я бы просто сделал это как:

 with temptable as (
      select 1 as col1name, 'a' col2name from dual union all
      select 2, 'b' from dual
     )
Select *
from temptable
where col1name = 1;
  

Ответ №2:

В качестве альтернативы CTE (common table expression), предложенной Гордоном, вы также можете использовать запрос как встроенное представление старой школы.

Например:

  SELECT tt.col1name
      , tt.col2name
   FROM ( SELECT 1 AS col1name, 'a' AS col2name FROM DUAL
          UNION ALL SELECT 2, 'b' FROM DUAL
          UNION ALL SELECT 3, 'c' FROM DUAL
        ) tt
  WHERE tt.col1name = 1
  ORDER
     BY tt.col1name