【发布时间】:2020-08-01 23:06:58
【问题描述】:
作为最近从 SQL Server 转换过来的人,我对 Postgresql 有了一些了解。
我真的很讨厌在 SQL 中编写嵌套的 selevt 语句,因为我发现这样做会影响代码的可读性和可维护性。
通常我会在 SQL Server 中创建一个存储过程,我会在其中选择一些东西到一个临时表中,然后我可以在另一个 select 语句中使用它。
CREATE OR ALTER PROCEDURE Procname
AS
BEGIN
SELECT
Somewhere.Col_1,
Somewhere.Col_2
INTO
#Temptable
FROM
Somewhere Somewhere
SELECT
Temptable.Col_1,
Somewhere_Else.Col3
FROM
#Temptable Temptable
INNER JOIN
Somewhere_Else.Col_2 = Temptable.Col_2
END
当我执行这个过程时,我会得到最终的选择查询
如何在 Postgresql 中复制这个过程?
我知道您可以选择一个临时表,但我似乎无法弄清楚如何在同一过程中的下一个选择语句中使用该表
【问题讨论】:
-
(1) 我迷路了,您甚至没有在存储过程中使用临时表。 (2) 不应使用存储过程返回表;使用视图或表值函数。 (3) 两个数据库都支持您正在寻找的 CTE。
-
对不起,我写的示例代码有点快。通常,我正在研究一个项目,在该项目中我必须在新的计算列等中使用计算列。使用嵌套的选择语句会很快变旧,这就是为什么我喜欢使用过程并选择可以加入的临时表的原因随时需要
-
以这种方式使用临时表是一种在 SQL Server 用户中很常见的反模式。不要将其应用于其他 DBMS。
-
那么避免嵌套选择语句的好方法是什么(我想尽可能使用连接而不是嵌套语句)
-
啊,我看到了一个利用 CTE 的解决方案。目前看来符合要求
标签: sql postgresql nested