多个可重用的SQL查询

时间:2015-06-02 14:29:47

标签: sql oracle stored-procedures cursor

注意如果我使用“select”,我收到错误提交到stackoverflow,所以拼错了我的查询。 [现已修复])

对不起,这是一个新手问题。我有一个很长的SQL查询,越来越难以管理。事实上,有一些子查询被多次使用。打破查询的最佳方法是什么?我宁愿把它保存在数据库中,而不是把它带到调用程序中。它就是这样的。

Select A, B, C
from (select D from Table_1 where ...)
Union Select E, F
from Table_2
  Inner Join (Select D, E, from Table_1 where...)..

所以我想做的是

Result1 = select D,E from Table_1 where....

Result2 = Select A,B,C from Result_1 Union Select E,F from Table_2 Inner Join Result_1 ...

最好的方法是什么?我无法使用Views,因为我没有权限。如何在第二个查询中使用第一个查询的结果?在这种情况下可以使用游标吗?

1 个答案:

答案 0 :(得分:4)

使用CTE可以多次访问同一个子查询(这是派生表的主要区别):

with CTE as
 (Select D, E, from Table_1 where...)
Select A, B, C
from CTE
Union 
Select E, F
from Table_2
  Inner Join CTE ..