3

我有一个具有这种结构的表:

在此处输入图像描述

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

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

结果将是这样的:

    REQUEST_ID    |    REQUEST_TYPE
__________________|____________________
                  |
    1             |    Delivery
    1             |    Invoice
    2             |    Delivery
    2             |    Invoice

我想要做的是在开始时使用唯一键(应该是 INT 并且像自动编号)查询(或创建视图),如下所示:

ID  |  REQUEST_ID    |    REQUEST_TYPE
____|________________|____________________
    |                |
1   |  1             |    Delivery
2   |  1             |    Invoice
3   |  2             |    Delivery
4   |  2             |    Invoice

先感谢您。

4

4 回答 4

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
于 2013-06-26T09:28:59.890 回答
1

你可以使用 rownum :

select rownum, REQUEST_ID, REQUEST_TYPE
from
(
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
)
于 2013-06-26T09:36:43.823 回答
1

为什么您不尝试连接REQUEST_TYPE + REQUEST_ID然后将其放入列ID而不是生成 ID?

ID  |  REQUEST_ID    |    REQUEST_TYPE
____|________________|____________________
    |                |
D1  |  1             |    Delivery
I1  |  1             |    Invoice
D2  |  2             |    Delivery
I2  |  2             |    Invoice
于 2013-06-26T09:30:18.953 回答
-1

我会说序列将是最简单的方法。如果您希望 ID 始终从 1 开始,请在查询之前重新启动序列:

ALTER SEQUENCE temp_id RESTART 1;

不知道这个有多快,slash有没有更快的方法。在标准 SQL 的扩展中,某些 SQL 系统也可能为此具有特殊功能。

于 2013-06-26T09:46:21.823 回答