Заменить временную таблицу с предложением
В БД № 1 я создаю таблицу tC, объединяя таблицу А с таблицей В, где таблица В включает список значений, вставленных удаленным запросом из другой БД № 2 (ссылка на БД).
create table tC
as
(
select ta.col3, tb.col4
from
tA, tB
where
ta.col1 = tb.col2
Теперь мне нужно написать его без использования таблицы B и без ссылок на БД, что означает, что мне как-то нужно иметь таблицу B в качестве предложения with со значениями, взятыми в качестве входных данных.
- Выберите массив значений из БД № 2
- Используйте значения для объединения с таблицей A в БД № 1 для создания таблицы C
Я использую скрипт. Предполагая, что у меня есть массив значений в памяти, как мне создать предложение with со списком значений и имен столбцов и использовать его для объединения?
что-то вроде:
with tB as (
5, 8, 14
2, 3, 17
10, 1, 15
),
create table tC
as
select ta.col3, tb.col4
from
tB, tA
where
ta.col1 = tb.col2
3 ответа
Примерно так может быть то, что вы хотите:
create table tC as
with tB as (
select 5 as col1, 8 as col2, 14 as col3 from dual union all
select 2, 3, 17 from dual union all
select 10, 1, 15
)
select ta.col3, tb.col3
from tB join
tA
on ta.col1 = tb.col2 ;
Учитывая ваши данные образца, я понятия не имею, что tb.col4
может иметь в виду, поэтому я изменил его tb.col3
,
В Oracle with
прикреплен к select
так что это идет между create table
и select
,
Вы хотите это как правильно?
WITH tbl1 AS (
SELECT * FROM (
VALUES
(1, 4, 7),
(2, 5, 8),
(3, 6, 9)
) temp (c1, c2, c3)
),
tbl2 AS (
SELECT * FROM (
VALUES
(1, 11, 12, 13),
(2, 22, 23, 23),
(3, 33, 34, 33)
) temp (c1, c2, c3, c4)
) Select tbl1.c3, tbl2.c4 FROM tbl1 JOIN tbl2 ON tbl1.c1 = tbl2.c1
В SQL Server вы можете использовать это как таблицу:
SELECT *
FROM
(
VALUES
(5, 8, 14),
(2, 3, 17),
(10, 1, 15)
) t (c1, c2, c3)
Если ваш случай с Oracle, вы можете проверить, есть ли сходство для чего-то подобного.
редактировать
Я искал и нашел что-то подобное для Oracle:
create type pseudo_table as table of number
\\
select * from table(pseudo_table(1,2,3)) t
Надеюсь, поможет.