【问题标题】:Let two table act as one让两张桌子合二为一
【发布时间】:2013-10-08 12:18:35
【问题描述】:

有没有办法让两张桌子合二为一?我有两个相同的表,唯一的区别是一个包含最近的数据,另一个包含旧数据。有没有办法做这样的事情?

select * 
  from customers a, 
       (rentals union archrentals) r
 where a.serno = r.custserno
   and r.rentaldate > YYYYMMDD;

【问题讨论】:

    标签: sql oracle merge union


    【解决方案1】:

    为什么不创建这样的视图?

    CREATE VIEW v_allRentals
    AS
    SELECT * form rentals
    UNION ALL
    SELECT * FROM archrentals
    

    通过这种方式,您可以使用 v_allRentals 而不必担心每次创建查询时都会忘记旧查询。

    谢谢, 粘液

    【讨论】:

    • 我猜这意味着创建了一个全新的表?这是行不通的,因为我们谈论的是大约 1 亿条记录。 :-)
    • @user1297532 只要不创建 MATERIALIZED VIEW,DB 中就不会有新表,只是现有数据的表示 :) read this
    • 抱歉,我错过了 VIEW。没有新表,只是一个视图。无论如何,使用正确分区的表,您不需要为旧记录创建“存档”表,这也是因为您继续查询它:)
    【解决方案2】:

    使用临时表

    select * 
    
    INTO #allcustomers
    
      from customers a, 
           (rentals union archrentals) r
     where a.serno = r.custserno
       and r.rentaldate > YYYYMMDD;
    

    那么就可以使用 temptable 来查询结果了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      相关资源
      最近更新 更多