首页 > 解决方案 > 如何横向加入函数

问题描述

我不确定我的问题是否正确,但这就是我想要做的。

我有一个errorlog带字段的表,link我有一个函数http_get(基于pgsql-http它给了我statuslink

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

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桌子:

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

pgsql-http: https://github.com/pramsey/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 ;

结果:No records found.

但是,这有效:

select * from http_get('http://test.com')

标签: postgresqlpostgresql-10lateral-join

解决方案


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

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

另外,函数调用总是隐式执行 asLATERAL和 aLEFT OUTER JOIN在这里基本没用,所以如果你坚持要横向执行函数,那么这样做:

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

推荐阅读