(注意如果我使用“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,因为我没有权限。如何在第二个查询中使用第一个查询的结果?在这种情况下可以使用游标吗?
答案 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 ..