使用UNION创建VIEW时插入UNIQUE DUMMY COLUMN

Chr*_*ark 3 sql oracle oracle11g

我有一个这种结构的表:

在此输入图像描述

我使用这个脚本来查询请求:

SELECT   D.DELIVERY_REQUEST_ID AS "REQUEST_ID",
         'Delivery' AS "REQUEST_TYPE"
   FROM  DELIVERY_REQUEST D
UNION
SELECT   I.INVOICE_REQUEST_ID AS "REQUEST_ID",
         'Invoice' AS "REQUEST_TYPE"
   FROM  INVOICE_TRX I
Run Code Online (Sandbox Code Playgroud)

结果将是这样的:

    REQUEST_ID    |    REQUEST_TYPE
__________________|____________________
                  |
    1             |    Delivery
    1             |    Invoice
    2             |    Delivery
    2             |    Invoice
Run Code Online (Sandbox Code Playgroud)

我想要做的是在开头用一个唯一的键(应该是一个INT和一个自动数字)查询(或创建一个视图),如下所示:

ID  |  REQUEST_ID    |    REQUEST_TYPE
____|________________|____________________
    |                |
1   |  1             |    Delivery
2   |  1             |    Invoice
3   |  2             |    Delivery
4   |  2             |    Invoice
Run Code Online (Sandbox Code Playgroud)

先感谢您.

Ben*_*Ben 6

首先,当您添加字符串时使用UNION ALL,因此Oracle不会尝试进行不同的排序.

要实际回答问题,您可以使用分析函数ROW_NUMBER()

select row_number() over ( order by request_id, request_type ) as id
     , a.*
  from ( select d.delivery_request_id as request_id
              , 'delivery' as request_type
           from delivery_request d
          union all
         select i.invoice_request_id as request_id
              , 'invoice' as request_type
           from invoice_trx i
                ) a
Run Code Online (Sandbox Code Playgroud)