Oracle 12c - 根据不同表中的值动态生成where子句

时间:2016-09-29 02:15:50

标签: sql oracle plsql dynamic-sql oracle12c

我正在尝试编写这样的Oracle 12c SQL语句:

select * from table1 where col1 in (*dynamicvalue*)

我希望动态值是以下SQL的结果:

select col2 from table2 where rowid = 1

这可能吗? Col2包含如下值的列表:'val1','val2','val3'

谢谢

2 个答案:

答案 0 :(得分:2)

您可以拆分字符串并执行查询,而不是dynamic-sql。要拆分字符串,请使用Promise.all([ fetch("api.com/things"), fetch("api2.com/otherthings"), fetch("api3.com/yetotherthings") ]) .then(res=> { //do something with res[0], res[1], res[2] })

regexp_substr

答案 1 :(得分:0)

为什么不这样做?

select t1.*
from table1 t1
where t1.col1 in (select col2 from table2 where rowid = 1);

编辑:

在单个列中存储值列表是一个糟糕的主意,我错误地解释了这个问题。我将“值列表”作为存储在不同行中的值。为什么?因为这是存储数据的正确方法。将列列表存储在分隔列表中并不是SQLish。

尽管如此,我们有时会遇到其他人非常糟糕的设计决策。如果你遇到这种情况,你可以使用这样的查询:

select t1.*
from table1 t1
where exists (select 1
              from table2 t2
              where rowid = 1 and
                    ',' || t2.col2 || ',' like '%,' || t1.col1 || ',%'
             );