plsql-合并到两个具有不同列的表中

时间:2011-07-07 18:24:01

标签: sql oracle

我有两个查询,一个返回输出:

id | faults | avg_duration
--------------------------
x  | 55     |   45.3
y  | 102    |   11.2
z  | 333    |   25.3

另一个:

id | connection | duration
-----------------------
x  | 12         |   10
y  | 55         |   25
z  | 77         |   36

以上查询使用where子句来定义时间戳(开始,结束),即to_date之间的Start_date('01 / 01/2011 10:10:00','dd / mm / yyyy 24hr:mm :ss')和to_date('01 / 02/2011 10:10:00','dd / mm / yyyy 24hr:mm:ss')= 1个月的持续时间

我想将这两个结果插入到这样的新表中,假设表已经存在:

    start_date       | id | faults |avg_duration| connection | duration 
-------------------------------------------------------------------------
01/01/2011 10:10:00  |  x |   55   |   45.3     |    12      |   10
01/01/2011 10:10:00  |  y |   102  |   11.2     |    55      |   25
01/01/2011 10:10:00  |  z |   333  |   25.3     |    77      |   36

每次查询的持续时间发生变化时,上表将使用新数据进行更新:

    start_date       | id | faults |avg_duration| connection | duration 
-------------------------------------------------------------------------
01/01/2011 10:10:00  |  x |   55   |   45.3     |    12      |   10
01/01/2011 10:10:00  |  y |   102  |   11.2     |    55      |   25
01/01/2011 10:10:00  |  z |   333  |   25.3     |    77      |   36
01/05/2011 10:10:00  |  x |   10   |   4500     |    41      |   100
01/05/2011 10:10:00  |  y |   100  |   5000     |    41      |   250
01/05/2011 10:10:00  |  z |   300  |   2000     |    71      |   360

1 个答案:

答案 0 :(得分:1)

我会做这样的事情:

INSERT
  INTO new_table
SELECT q1.start_date, q1.id, q1.faults, q1.avg_duration, q2
  FROM (query 1) q1,
       (query 2) q2
 WHERE q1.id = q2.id -- (or do a join above)
   AND -- if you want to exclude duplication
       NOT EXISTS (SELECT 1
                     FROM new_table a
                    WHERE a.start_date = q1.start_date
                      AND a.id = q1.id ... etc ...
                  )

认为会起作用。这是来自一个稍微朦胧的大脑,但它所做的一点应该是有效的 - 只需将两个查询组合在一起并将它们视为两个连接的表,然后将结果插入到新表中(避免如果需要,重复。)