如何存储select语句的结果,以便我可以将结果与in其他查询的子句一起重用?这是一些伪代码:
declare
ids <type?>;
begin
ids := select id from table_with_ids;
select * from table1 where id in (ids);
select * from table2 where id in (ids);
end;
Run Code Online (Sandbox Code Playgroud)
...或者如果我只是将子查询放在两个select语句中,优化器会为我做这个吗?
编辑:这里有关于表格结构的更多信息.
基本上table1是一个标准表,其中id是主键.table2有一个3列主键,其中id是其中一列.在我的例子中,table2中的id将出现在三行中.
您可以使用SQL表对象来存储select的结果并重用它.它将消耗更多内存,并且只有在第一个SELECT需要大量时间时才有效.
CREATE TYPE tab_number IS TABLE OF NUMBER;
/
Run Code Online (Sandbox Code Playgroud)
您可以将它与BULK COLLECT INTO子句一起使用:
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;
Run Code Online (Sandbox Code Playgroud)
在版本9i中,您需要使用CAST查询表:
SELECT *
FROM table2
WHERE id IN (SELECT column_value FROM CAST (TABLE(ids) AS tab_number));
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用GLOBAL TEMPORARY TABLE来存储中间结果集.
| 归档时间: |
|
| 查看次数: |
3989 次 |
| 最近记录: |