在DB#1中我通过将表A与表B连接来创建表tC,其中表B包含由来自不同DB#2(DB链接)的远程查询插入的值列表。
create table tC
as
(
select ta.col3, tb.col4
from
tA, tB
where
ta.col1 = tb.col2
现在我需要在不使用表B且没有DB链接的情况下编写它,这意味着我需要将表B作为with子句,并将值作为输入。
我正在使用脚本。假设我在内存中有值数组,如何创建带有值列表和列名的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
答案 0 :(得分:2)
这样的事情可能就是你想要的:
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
之间。
答案 1 :(得分:0)
在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
希望它有所帮助。
答案 2 :(得分:0)
你想要这样吗?
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