Заменить временную таблицу с предложением

В БД № 1 я создаю таблицу tC, объединяя таблицу А с таблицей В, где таблица В включает список значений, вставленных удаленным запросом из другой БД № 2 (ссылка на БД).

create table tC  
as  
(
select ta.col3, tb.col4  
from  
    tA, tB  
where  
     ta.col1 = tb.col2  

Теперь мне нужно написать его без использования таблицы B и без ссылок на БД, что означает, что мне как-то нужно иметь таблицу B в качестве предложения with со значениями, взятыми в качестве входных данных.

  1. Выберите массив значений из БД № 2
  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

Надеюсь, поможет.

Другие вопросы по тегам