Pentaho在sql where子句中插入列表

Pentaho在sql where子句中插入列表,pentaho,where-clause,Pentaho,Where Clause,我是Pentaho的新手,我正在运行一个转换,首先查询一个数据库以获得ID列表,然后使用查询另一个数据库的sql语句where子句中的列表。i、 e 其中,{list}中的order_id 如何指定变量(ID列表),然后将它们添加到penthao中表input中的查询语句中 谢谢,有一些方法可以做到这一点,但它们不是很有效。除非您的查询非常大,否则我认为您最好在运行它时不使用{list}过滤器中的where order\u id,并使用流查找步骤来获取所需的字段。您可以通过选中“在脚本中替换变量

我是Pentaho的新手,我正在运行一个转换,首先查询一个数据库以获得ID列表,然后使用查询另一个数据库的sql语句where子句中的列表。i、 e

其中,{list}中的order_id

如何指定变量(ID列表),然后将它们添加到penthao中表input中的查询语句中


谢谢,

有一些方法可以做到这一点,但它们不是很有效。除非您的查询非常大,否则我认为您最好在运行它时不使用{list}过滤器中的where order\u id,并使用流查找步骤来获取所需的字段。

您可以通过选中“在脚本中替换变量”并指定(${list})中的
where order\u id,在
表输入中展开变量)

<>但是,如果值列表长,我会考虑使用<代码>流查找< /代码>步骤。流查找步骤在转换运行开始时将值从一个源读取到缓存中,然后在常规运行期间对流经缓存的每一行执行查找

它看起来像这样:

SELECT * FROM table_name WHERE 1=0


首先读取“数据网格”中的值,然后将其用作“表输入”步骤中所有值的查找缓存。然后,您可以添加一个
筛选行
步骤,以排除查找失败的任何内容。

使用动态SQL连接:

您可以使用表输入->分组依据->修改的Java脚本值->动态SQL联接的组合

表格输入将根据需要选择ID列表

在“分组依据”中,可以将ID列表聚合为一个逗号分隔的字符串(

)

Modified Java Script Value中,您可以定义一个包含SQL查询的XML文本(如果您不介意将查询保留在一行中,可以使用字符串替换{list})

您不需要转义字符,但您需要在以后自己替换
list
sqlQuery=sqlQuery.toString().replace(“{list}”,list,“g”)

最后,您必须在JS步骤的“Fields”表中指定sqlQuery变量,以便将其作为新字段添加到每一行

然后在动态SQL连接中需要在
SQL字段名中指定sqlQuery字段
。在
模板SQL
中,您必须放置与生成的查询具有相同数据类型的任何查询,例如:

SELECT * FROM table_name WHERE 1=0
var sqlQuery = <>
    <![CDATA[
        SELECT
            *
        FROM table_name
        WHERE
            order_id IN ( {list} )    
    ]]>
</>
SELECT * FROM table_name WHERE 1=0