Вставка Oracle SQL с предложением With
Я новичок в sql, так что, возможно, это глупый вопрос, но есть ли возможность использовать предложение WITH с Insert Into? Или есть общие способы обхода? Я имею в виду что-то вроде этого:
With helper_table As (
Select * From dummy2
)
Insert Into dummy1 Values (Select t.a From helper_table t Where t.a = 'X' );
спасибо!
Мой пример слишком фиктивный, поэтому я добавляю расширенный код (спасибо для ответов до сих пор).
INSERT
INTO dummy values (a,b) //more values
WITH helper_table AS
(
SELECT *
FROM dummy2
)
WITH helper_table2 AS //from more tables
(
SELECT *
FROM dummy3
)
SELECT t.value as a, t2.value as b
FROM helper_table t
join helper_table t2 on t.value = t2.value //some join
WHERE t.value = 'X' and t2.value = 'X' //other stuff
Ответы
Ответ 1
Вы можете использовать как можно больше "helper_tables".
create table t(helper1 varchar2(50) , helper2 varchar2(50) , dataElement varchar2(50) );
insert into t(helper1, helper2, dataelement)
with
de as(select level lvl from dual connect by level <10)
,h1 as (select lvl, lvl/1.5 hp from de)
,h2 as (select lvl, lvl/2 hp2 from de)
select h1.hp , h2.hp2, de.lvl
from de
inner join
h1 on de.lvl = h1.lvl
inner join
h2 on de.lvl = h2.lvl
/
Имея это в виду, вы можете выполнять все свои соединения посредством нормального соединения таблиц с главной таблицей
Ответ 2
INSERT
INTO dummy1
WITH helper_table AS
(
SELECT *
FROM dummy2
)
SELECT t.a
FROM helper_table t
WHERE t.a = 'X'
Ответ 3
Вы можете сделать что-то вроде
INSERT INTO dummy1
WITH helper_table AS (
SELECT *
FROM dummy2
)
SELECT t.a
FROM helper_table t
WHERE t.a = 'X';
Для вашего обновленного запроса
INSERT
INTO dummy values (a,b) //more values
WITH helper_table AS
(
SELECT *
FROM dummy2
),
helper_table2 AS //from more tables
(
SELECT *
FROM dummy3
)
SELECT t.value as a, t2.value as b
FROM helper_table t
join helper_table t2 on t.value = t2.value //some join
WHERE t.value = 'X' and t2.value = 'X' //other stuff
Ответ 4
Имейте в виду, что использование CTE предназначено для небольшого количества данных. Наличие тысяч строк в CTE может привести к снижению производительности.
Это потому, что весь контент вспомогательной таблицы хранится в PGA, если не в TEMP.