如何横向加入功能

时间:2019-03-11 07:05:02

标签: postgresql postgresql-10 lateral-join

我不确定我的问题是否正确,但这就是我要尝试的方法。

我有一个表errorlog和一个字段link,并且我有一个函数http_get(基于pgsql-http,该函数为我提供{{ 1}})

我相信我需要像这样进行横向连接:

status

但是它没有给我任何结果。如何将这样的功能应用于表?

link表:

SELECT
    el.link,
    hg.status
FROM
    errorlog AS el
    LEFT OUTER JOIN LATERAL http_get(el.link) AS hg ON true
WHERE el.link IS NOT NULL ;

errorlog https://github.com/pramsey/pgsql-http

更新: 我已经尝试过以下查询:

+----+---------------------+
| id | link                |
+----+---------------------+
| 1  | http://www.test.com |
+----+---------------------+
| 2  | http://www.link.com |
+----+---------------------+

结果:pgsql-http:

SELECT
    el.link,
    (http_get(el.link)).status
FROM
    errorlog AS el
WHERE el.link IS NOT NULL ;

结果:No records found.

但是,这可行:

SELECT el.link, hg.status FROM errorlog AS el, http_get(el.link) AS hg WHERE el.link IS NOT NULL ;

1 个答案:

答案 0 :(得分:0)

为什么不简单地在SELECT子句中调用该函数?

SELECT
    el.link,
    (http_get(el.link)).status
FROM
    errorlog AS el
WHERE el.link IS NOT NULL ;

此外,函数调用始终以LATERAL的方式隐式执行,而LEFT OUTER JOIN在这里基本上是无用的,因此,如果您坚持横向执行函数,请执行以下操作:

SELECT
    el.link,
    hg.status
FROM
    errorlog AS el, http_get(el.link) AS hg
WHERE el.link IS NOT NULL ;