oracle中的reuse,VIEW中的Oracle SQL Reuse子查询

我正在尝试设置一个可能包含1000个记录的视图.某些字段需要子查询,这些子查询返回完全相同的数据.我想知道我是否可以在视图中查询一次,而不是每次都运行它.

下面是一些示例表/数据:

DROP VIEW MYVIEW;

DROP TABLE MYTABLE;

DROP TABLE MYTABLE_PARENT;

-- TABLES FOR VIEW

CREATE TABLE MYTABLE_PARENT ( PRIMARY_KEY NUMBER PRIMARY KEY );

CREATE TABLE MYTABLE ( PRIMARY_KEY NUMBER, MYVAL VARCHAR(255), PARENT_PRIMARY_KEY NUMBER);

INSERT INTO MYTABLE_PARENT VALUES (1);

INSERT INTO MYTABLE_PARENT VALUES (2);

INSERT INTO MYTABLE VALUES (1, 'MYVAL1-1', 1);

INSERT INTO MYTABLE VALUES (2, 'MYVAL1-2', 1);

INSERT INTO MYTABLE VALUES (3, 'MYVAL2-1', 2);

-- VIEW

CREATE OR REPLACE FORCE VIEW MYVIEW AS

SELECT CS.PRIMARY_KEY AS PARENT_PK,

-- THE BELOW STATEMENTS REUSE THE SAME INNER SUBQUERY, IF THE

-- VIEW CONTAINS 1000 ROWS, THE INNER SUBQUERY WILL BE EXECUTED

-- 1000 TIMES, RETURNING THE SAME DATA EACH TIME.

(SELECT PRIMARY_KEY FROM MYTABLE WHERE MYVAL = 'MYVAL1-1' AND

PARENT_PRIMARY_KEY = (SELECT PRIMARY_KEY FROM MYTABLE_PARENT

WHERE PRIMARY_KEY = CS.PRIMARY_KEY)) AS OUTPUT_VAL_1,

(SELECT PRIMARY_KEY FROM MYTABLE WHERE MYVAL = 'MYVAL1-2' AND

PARENT_PRIMARY_KEY = (SELECT PRIMARY_KEY FROM MYTABLE_PARENT

WHERE PRIMARY_KEY = CS.PRIMARY_KEY)) AS OUTPUT_VAL_2

-- DEFINE CS

FROM MYTABLE_PARENT CS;

SELECT * FROM MYVIEW;

select语句的结果如下:

PARENT_PK OUTPUT_VAL_1 OUTPUT_VAL_2

---------------------- ---------------------- ----------------------

1 1 2

2

因此,在上面的查询中,我想对视图中的每一行只运行一次以下查询:

(SELECT PRIMARY_KEY FROM MYTABLE_PARENT WHERE PRIMARY_KEY = CS.PRIMARY_KEY)

有没有办法在视图中优化内部子查询?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值