多个可重用SQL查询

多个可重用SQL查询,sql,oracle,stored-procedures,cursor,Sql,Oracle,Stored Procedures,Cursor,(注意,如果我使用“选择”,提交stackoverflow时会出现错误,因此我的查询拼写错误。[现已修复]) 抱歉,这是个新手问题。我有一个很长的SQL查询,越来越难管理。事实上,有一些子查询被多次使用。什么是最好的方法来分解查询?我更愿意把它保存在数据库中,而不是把它带到调用程序中。事情是这样的 Select A, B, C from (select D from Table_1 where ...) Union Select E, F from Table_2 Inner Join (S

(注意,如果我使用“选择”,提交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 ...

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

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


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


这是一项针对常见表表达式(也称CTE)的任务,请检查WITH语法。使用WITH,我必须在我的Looong sql中多次重新编写Result_1的查询query@user2689782-使用WITH表示不必重新编写查询;也许你用错了?如果是同一个查询,你必须用CTEOh只写一次,哦…对不起,我明白你的意思了。我知道从…中选择D,E。。看起来不完全一样,但本质上是相同的逻辑。但我想用这个可能会成功…非常感谢!这是一项针对常见表表达式(也称CTE)的任务,请检查WITH语法。使用WITH,我必须在我的Looong sql中多次重新编写Result_1的查询query@user2689782-使用WITH表示不必重新编写查询;也许你用错了?如果是同一个查询,你必须用CTEOh只写一次,哦…对不起,我明白你的意思了。我知道从…中选择D,E。。看起来不完全一样,但本质上是相同的逻辑。但我想用这个可能会成功…非常感谢!好的,新问题。我正在尝试在Excel上运行此功能…它不支持“with”。如果没有with语句,你知道怎么做吗?@user2689782:Excel不懂SQL,如果你连接到Oracle,你可以提交任何有效的Oracle语法?你可以建立odbc连接-常规select、join等语句似乎正常工作。但是创建临时表的概念似乎失败了……它在我的SQL developer中工作,但在从Excel调用时不起作用。我不知道是否有一些安全设置或类似的设置阻止了这一点。让我发疯了…但是非常感谢你的帮助。好的,新问题。我正在尝试在Excel上运行此功能…它不支持“with”。如果没有with语句,你知道怎么做吗?@user2689782:Excel不懂SQL,如果你连接到Oracle,你可以提交任何有效的Oracle语法?你可以建立odbc连接-常规select、join等语句似乎正常工作。但是创建临时表的概念似乎失败了……它在我的SQL developer中工作,但在从Excel调用时不起作用。我不知道是否有一些安全设置或类似的设置阻止了这一点。让我发疯了…但是非常感谢你的帮助。
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 ..