如何以干净且可维护的方式编写非常复杂的 SQL? [关闭]

Posted

技术标签:

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

我在数据库迁移项目中。

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

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

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

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

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

【问题讨论】:

发布表格和查询的示例,如果您将问题保持如此笼统,那太复杂了,无法帮助您,please, read this "how to ask a good question" 【参考方案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 可以很友好!

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

【讨论】:

以上是关于如何以干净且可维护的方式编写非常复杂的 SQL? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在客户端处理多个请求/API 调用并行的 JWT 刷新令牌?

2020,8种必备Selenium编写自动化用例的技巧

PyTorch 中是不是存在干净且可扩展的 LSTM 实现? [关闭]

如何以复杂的方式使用案例

前端工程之模块化

编写干净、灵活且易于维护的用户输入提示