我将如何存储它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存储中间结果集。