回答

收藏

在Oracle在选择查询的过程中重用

技术问答 技术问答 254 人阅读 | 0 人回复 | 2023-09-14

我将如何存储它select句子的结果可以是结果和结果in子句重用于其他查询?这是一些伪代码:. G4 ~1 @1 E3 B2 N3 h
declare  ids ;begin  ids := select id from table_with_ids;  select * from table1 where id in (ids);  select * from table2 where id in (ids);end;…或者如果我只是把子查询放在两个位置select在句子中,优化器会为我执行这个操作吗?4 l$ i( O7 I( O3 l- {. g6 X
编辑:这是关于我的表结构的更多信息。$ G3 \$ b) G: M3 t8 ~4 l
基本上,table一是标准表,它id是主键。而table2有三列主键,其中id这些列之一。在我的情况下,table2中的ID在三行中显示。
  T$ |# f9 j; ^& A6 M  n+ l                                                               
; H& M! c( r7 i    解决方案:                                                                ) P% n! U, B" F0 k) ?4 `4 h
                                                                您可以使用SQL表对象存储选择结果并重复使用。这将消耗更多的内存,只在第一个SELECT有效需要很多时间。+ p$ u3 }0 s5 d/ w7 U5 p
CREATE TYPE tab_number IS TABLE OF NUMBER;/你可以和它和BULK COLLECT INTO子句一起使用:8 p4 c$ v5 P! x
DECLARE   ids tab_number;BEGIN   SELECT id BULK COLLECT INTO ids FROM table_with_ids;   SELECT * /*into ??*/       FROM table1     WHERE id IN (SELECT column_value FROM TABLE(ids));   SELECT * /*into ??*/       FROM table2    WHERE id IN (SELECT column_value FROM TABLE(ids));END;在版本9i中,需要使用CAST查询表之前,请执行以下操作:
/ [- }6 m1 Z2 }% n8 R! @  zSELECT *   FROM table2  WHERE id IN (SELECT column_value FROM CAST (TABLE(ids) AS tab_number));或者,你可以用GLOBAL TEMPORARY
2 l9 q3 x" x8 v4 ATABLE存储中间结果集。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则