PostgreSQL重新使用计算结果作为其他选择计算的输入

时间:2018-06-14 16:04:54

标签: postgresql

我们有什么方法可以在select子句中获取计算结果并将其插入select子句中的另一个计算中?

例如,这是我想要的,但目前还不能:

select trim(leading https://www.amazon.com for url) as trimmedURL,

substring(trimmedURL, from position('/' in trimmedURL) for position ('html' in trimmedURL))....

正如您所看到的,我在子字符串函数中使用了trimmedURL 3次。我知道如何天真地做到这一点是修剪(将https://www.amazon.com为url)复制/粘贴到子字符串函数中。 有没有办法避免这种情况而不是创建非常大的函数调用,因为计算的第一个值可能会多次放在其他函数中。这将提高代码的可读性和可用性。

1 个答案:

答案 0 :(得分:0)

您可以使用lateral join并将计算字段放在横向查询中。然后可以从主查询中访问横向字段。

Postgres documentation for lateral join

即。

SELECT
  trimmedUrl
, SUBSTRING(trimmedURL,10,20) url_part 
FROM mytable
LEFT JOIN LATERAL (SELECT trim(leading https://www.amazon.com for url) as trimmedURL) trmd 
               ON TRUE

另请注意,postgresql会忽略列/表等命名中的大小写,除非它们被引用。

这是一个独立的例子:

WITH x(col) AS (Values ('abc://cdf/def'), ('abc://xyz/pqr'))
SELECT x.col, SUBSTRING(y.col2 from position('/' in y.col2)) resuing_computation
FROM x
LEFT JOIN LATERAL (SELECT trim(leading 'abc://' from col) col2) y ON TRUE