#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