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
在 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