【问题标题】:How to write very complex SQL in a clean and maintainable way? [closed]如何以干净且可维护的方式编写非常复杂的 SQL? [关闭]
【发布时间】:2020-01-03 13:47:27
【问题描述】:

我在数据库迁移项目中。

我必须以可维护的方式编写非常复杂的 SQL。前面的查询几乎是意大利面条。

我想在数据库中创建一个视图,但我没有权限。

所以我正在考虑的是根据数据库的查询结果制作一个桥接数据库。

之后,我在桥接数据库中创建了视图。

效率低吗?或者有什么好方法来处理复杂的数据库查询?

【问题讨论】:

标签: java sql oracle


【解决方案1】:

如果您无法创建视图,请查看 CTE(通用表表达式,即 WITH 因式分解子句)是否使事情更易于阅读和维护。只是一个简短的例子:

而不是

select ...
from (select deptno
      from dept
     ) join ...

使用

with depts as
  (select deptno
   from dept
  )
select ...
from depts d join ...

因为它使您可以多次使用相同的 DEPTS CTE(而不是单独重复/写入多次)。


您对“桥接数据库”的想法要求使用数据库链接。对它们的操作通常比在自己的数据库中有数据时要慢。更新可能非常缓慢。


也许您最好请某人(DBA?)让您创建这些视图?

【讨论】:

    【解决方案2】:

    如何以可维护的方式编写 SQL 是一个非常广泛的问题。这真的取决于你需要做什么。我的建议是记录/评论您在查询中所做的每一件小事。此外,在文件顶部包含一条注释,详细解释查询试图做什么以及它是如何做的。

    正如其他用户所建议的,创建临时表是简化查询的好方法。首先,您可以将查询拆分为多个阶段,并将每个阶段设计为朝着最终目标迈出的合乎逻辑的一步。更重要的是,您可以查询临时表并查看每个阶段的结果,这使得修复错误变得更加容易。

    【讨论】:

      【解决方案3】:

      您是否请求过创建视图的权限?有时 DBA 可以很友好!

      假设您已经尝试过,您是否有权创建临时表?这可能是创建视图的一种解决方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-22
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 2016-12-17
        • 2011-08-13
        • 2016-09-29
        • 1970-01-01
        相关资源
        最近更新 更多