0

在 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 和数据库链接的情况下编写它,这意味着我需要以某种方式将表 B 作为 with 子句,并将值作为输入。

  1. 从 DB#2 中选择值数组
  2. 使用这些值与 DB#1 中的表 A 连接以创建表 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  
4

3 回答 3

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

于 2018-03-14T02:54:50.163 回答
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

希望能帮助到你。

于 2018-03-14T00:12:47.267 回答
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
于 2018-03-14T03:35:05.927 回答