如何以干净且可维护的方式编写非常复杂的 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 刷新令牌?