在 postgresql 中找不到按级别连接的替代方法

Posted

技术标签:

【中文标题】在 postgresql 中找不到按级别连接的替代方法【英文标题】:Unable to find alternative for connect by level in postgresql 【发布时间】:2021-05-02 11:35:58 【问题描述】:
select 
trim(regexp_substr(t.column_A, '[^,]+', 1, levels.column_value)) as column_A 

from (SELECT * FROM table_t t ) t, 

table(cast(multiset(select level from dual 
connect by level <= length (regexp_replace(t.column_A, '[^,]+')) + 1) as sys.OdciNumberList)) levels

无法在 postgresql 中找到按级别连接的替代方法。 在 postgresql 中也不存在对偶。

如果有人帮我确定上述查询的替代方案,那将是非常有帮助的。

【问题讨论】:

请提供示例数据、期望的结果以及您要实现的逻辑的说明。 如果不解释该代码的作用,这几乎是不可能回答的。您可能只想要select * from table_t t cross join unnest(string_to_array(t.column_a, ',')) as x(column_a) 独立于DBMS,from (SELECT * FROM table_t t ) t部分可以简化为from table_t t postgres 等效项是递归 CTE。 (也应该在 Oracle 上工作)并且:您不需要 dual 【参考方案1】:
SELECT * FROM generate_series(1,10);

将生成数字在 1 到 10 之间的行,方式与

相同
select level from dual connect by level <= 10

在 Oracle 中执行

【讨论】:

【参考方案2】:

您没有定义您的table_t,所以我假设column_a 是一个逗号分隔的字符串,因为这似乎是Oracle 正在寻找的。如果这是正确的,那么也许最简单的方法是将字符串转换为数组,然后展开数组。幸运的是,Postgres 分别为每个动作 string_to_array 和 unnest 提供了单个函数。 (请参阅文档:Array Functions and Operators)。

with table_t( column_a) as
     ( values ( 'abc,defgh,ijklm,nopqr,stuvw,zyz0123,456789'))
select unnest (string_to_array(column_a,','))
  from table_t; 

【讨论】:

以上是关于在 postgresql 中找不到按级别连接的替代方法的主要内容,如果未能解决你的问题,请参考以下文章

在 postgresql 中按级别和 regexp_substr 连接

在 API 级别 28 中找不到 Canvas 变量

如果在字符串返回方法中找不到字符串,则返回替代值

在 docker php 容器中找不到 MySQLi

不同长度的pandas groupby元组-ValueError:在通过级别中找不到值:MultiIndex

PSQLException:在此 ResultSet 中找不到列名 start_value