Postgresql

將別名/列定義列表賦予 ROWS FROM()

  • September 13, 2020

這顯然不起作用:

SELECT regexp_matches[1], regexp_matches[1]
FROM ROWS FROM (
 regexp_matches('fooBarBaz', '[[:upper:]]', 'g'),
 regexp_matches('fooBarBaz', '[[:lower:]]', 'g')
);

錯誤:

$$ 42702 $$列引用“regexp_matches”不明確

如何為函式呼叫提供別名?

SELECT u[1], l[1]
FROM ROWS FROM (
 regexp_matches('fooBarBaz', '[[:upper:]]', 'g'),
 regexp_matches('fooBarBaz', '[[:lower:]]', 'g')
) AS (u text[], l text[]);

錯誤:

$$ 42601 $$具有多個函式的 ROWS FROM() 不能有列定義列表

提示:在 ROWS FROM() 中為每個函式放置一個單獨的列定義列表。

SELECT u[1], l[1]
FROM ROWS FROM (
 regexp_matches('fooBarBaz', '[[:upper:]]', 'g') AS (u text[]),
 regexp_matches('fooBarBaz', '[[:lower:]]', 'g') AS (l text[])
);

錯誤:

$$ 42601 $$僅允許返回“記錄”的函式使用列定義列表

我沒主意了。這必須是可能的。

文件:

你也需要一個表別名

SELECT T.u[1], t.l[1]
FROM ROWS FROM (
 regexp_matches('fooBarBaz', '[[:upper:]]', 'g'),
 regexp_matches('fooBarBaz', '[[:lower:]]', 'g')
) AS t (u, l);

引用自:https://dba.stackexchange.com/questions/275448