【问题标题】:Oracle: Generate WHERE clause from resultset ids?Oracle:从结果集 ID 生成 WHERE 子句?
【发布时间】:2021-08-29 07:37:12
【问题描述】:

在 Toad for Oracle 12 中:

我使用复杂查询从表中选择了行。

我想在系统的application's WHERE clause 中选择那些相同的行。

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


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

我会将 WHERE 子句复制/粘贴到应用程序中。这是一项常见的任务,所以如果有像 Toad 中的按钮这样简单的东西可以做到这一点,那就太好了。


例子:

使用结果集...

ID    VAL
 1      A
 2      B
 3      C

...生成 WHERE 子句:

where id in (1,2,3)

或者如果 ID 是文本:

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

【问题讨论】:

  • 3 来自哪里?
  • 只需复制您的输出并用逗号替换换行符(或',',具体取决于数据类型)。
  • PL/SQL Developer 可以做到这一点 - 突出显示结果网格中的列,右键单击“复制为表达式列表”。如果您右键单击结果网格列,Toad 是否有类似的东西? (我在 SQL Developer 20.2 中看不到任何东西,但也许我遗漏了一些东西。)
  • @WilliamRobertson 我还没有在 Toad 中找到等效工具。

标签: sql oracle where-clause toad maximo


【解决方案1】:

这是 @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


相关:SQL Server: Generate WHERE clause from resultset ids?

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-07
        相关资源
        最近更新 更多