【问题标题】:Replace temporary table with with clause用 with 子句替换临时表
【发布时间】:2018-08-22 09:11:57
【问题描述】:

在 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  

【问题讨论】:

    标签: sql oracle with-clause


    【解决方案1】:

    在 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】:

      这样的东西可能就是你想要的:

      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 tableselect 之间。

      【讨论】:

        【解决方案3】:

        你想要这样吗?

        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
        

        【讨论】:

          猜你喜欢
          • 2011-08-24
          • 2023-02-23
          • 2016-12-07
          • 1970-01-01
          • 1970-01-01
          • 2010-11-14
          • 2023-03-15
          • 2018-04-12
          相关资源
          最近更新 更多