Oracle:从结果集 ID 生成 WHERE 子句?

Oracle: Generate WHERE clause from resultset ids?

在 Toad for Oracle 12 中:

我使用复杂查询 select 编辑了 table 中的行。

我想 select 系统 application's WHERE clause 中的相同行。

但是,该应用程序不支持完整的 SELECT 语句,仅支持 WHERE 子句。偶尔,它不允许复杂查询作为 WHERE 子句中的子查询,我当前的查询就是这种情况。


作为替代方案,有没有办法让 Toad 根据结果集的 ID 生成 WHERE 子句?

我会 copy/paste 将 WHERE 子句添加到应用程序中。这是一项常见任务,因此,如果 Toad 中有类似按钮这样的简单工具可以执行此操作,那就太好了。


示例:

使用结果集...

ID    VAL
 1      A
 2      B
 3      C

...生成 WHERE 子句:

where id in (1,2,3)

或者如果 ID 是文本:

where id in ('1','2','3')

您可以在 where 子句中使用子查询:

where id in (select id
             from . . .  -- your complicated query here
            )

您可以将 listagg 函数应用于您的输出并将输出 ID 连接到列表:

with a as (
  <your_current_query>
)
select 'where id in ('
  || listagg(id, ',') within group(order by id)
  || ')' as where_clause
from a

这是 @astentx 查询的 Maximo 特定版本:

with a as (

<<your query>>

)
select 'wonum in ('''
  || listagg(wonum, ''', ''') within group(order by wonum)
  || ''')' as where_clause
from a

此查询使用 Maximo 过滤字段的语法:

with a as (

<<your query>>
    
    )
select '='
  || listagg(attributename, ', =') within group(order by attributename)
  || '' as where_clause
from a


相关:

  • LISTAGG in Oracle to return distinct values