Java 如何以干净且可维护的方式编写非常复杂的SQL?
我参与了数据库迁移项目 我必须以可维护的方式编写非常复杂的SQL。前面的查询几乎是意大利面条 我想在数据库中创建一个视图,但我没有权限 所以我想的是根据数据库的查询结果创建一个桥接数据库 之后,我在桥接数据库中创建了视图Java 如何以干净且可维护的方式编写非常复杂的SQL?,java,sql,oracle,Java,Sql,Oracle,我参与了数据库迁移项目 我必须以可维护的方式编写非常复杂的SQL。前面的查询几乎是意大利面条 我想在数据库中创建一个视图,但我没有权限 所以我想的是根据数据库的查询结果创建一个桥接数据库 之后,我在桥接数据库中创建了视图 效率低吗?或者有什么好方法可以处理复杂的数据库查询吗?如果您不能创建视图,请查看CTE(公共表表达式,即with factoring子句)是否使内容更易于阅读和维护。举个简单的例子: 而不是 select ... from (select deptno from d
效率低吗?或者有什么好方法可以处理复杂的数据库查询吗?如果您不能创建视图,请查看CTE(公共表表达式,即with factoring子句)是否使内容更易于阅读和维护。举个简单的例子: 而不是
select ...
from (select deptno
from dept
) join ...
使用
因为它允许您使用相同的DEPTS CTE执行长查询所需的任意次数(而不是单独重复/写入多次)
您关于“桥接数据库”的想法要求使用数据库链接。对它们的操作通常比您自己的数据库中有数据时慢。更新速度可能非常慢
也许您最好让某人(DBA?)让您创建这些视图?您是否要求获得创建视图的权限?有时DBA会很友好
假设您已经尝试过,您是否有创建临时表的权限?这可能是创建视图的一种变通方法。如何以可维护的方式编写SQL是一个非常广泛的问题。这真的取决于你需要做什么。我的建议是记录/评论你在查询中所做的每一件小事。另外,在文件顶部添加一条注释,详细解释查询试图做什么以及如何做
正如其他用户所建议的,创建临时表是简化查询的一种好方法。首先,可以将查询分为几个阶段,并将每个阶段设计为实现最终目标的逻辑步骤。更重要的是,您可以查询临时表并查看每个阶段的结果,这使得修复错误变得更加容易 发布表格和查询的示例,如果您将问题保持为一般性的,那么这太复杂了,无法帮助您,
with depts as
(select deptno
from dept
)
select ...
from depts d join ...