如何横向加入一个函数
How to lateral join a function
我不确定我的问题是否正确,但这就是我正在尝试做的事情。
我有一个 table errorlog
字段 link
我有一个函数 http_get
(基于 pgsql-http
给了我 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 ;
但它没有给我任何结果。如何将这样的函数应用于 table?
errorlog
table:
+----+---------------------+
| 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')
您的查询必须至少提供与 errorlog
一样多的结果行。如果没有,一定是有错误。
为什么不简单地调用 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 ;
我不确定我的问题是否正确,但这就是我正在尝试做的事情。
我有一个 table errorlog
字段 link
我有一个函数 http_get
(基于 pgsql-http
给了我 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 ;
但它没有给我任何结果。如何将这样的函数应用于 table?
errorlog
table:
+----+---------------------+
| 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')
您的查询必须至少提供与 errorlog
一样多的结果行。如果没有,一定是有错误。
为什么不简单地调用 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 ;