SET 和 Select Query 结合 Run in a Single MySql Query 将结果传递到 pentaho

Posted

技术标签:

【中文标题】SET 和 Select Query 结合 Run in a Single MySql Query 将结果传递到 pentaho【英文标题】:SET and Select Query combine Run in a Single MySql Query to pass result in pentaho 【发布时间】:2018-10-22 07:44:21 【问题描述】:

以下 3 个查询我想在 mysql 中作为单个查询运行,我会将这个结果传递给 Pentaho 查询组件以绘制一些图表。

SET @input = select "22:4,33:4" from dual;  
SET @count := 0;     
select SUBSTRING_INDEX(@input, ' ', (@count) * 2), ' ', -1) as xyz, som_cnt as count from abc;   

示例字符串的长度未知 (22:4,33:4,96:6....)

expected output 

xyz      count
---------------- 
22        4
33        4
96        6

参考 - Mysql Query to Separate space delimited String Convert into 2 columns

设置查询计数=0,如果我可以在选择查询中合并此 SET 查询也可以。 选择查询使用计数对输入字符串进行一些解析 - 仅添加示例子字符串。 (此处添加解析逻辑)

我想要下面显示的 mysql 链接中的相同功能 我尝试了这个解决方案,但我不确定 set_config 在 mysql 中是否有效。 SET and SELECT within a single query?

或在 Pentaho 的 Query 组件中运行存储过程的任何方法。

【问题讨论】:

请给出示例数据和预期输出。问题有点不清楚。您很可能需要使用派生表(定义会话变量),然后您可以执行cross join @MadhurBhaiya 我已经更新了我的问题和预期的输出,如果您知道在单个查询中执行此任务的更好解决方案,随时欢迎:) 这个值"22:4,33:4" 是来自某个表,还是您的输入? 试试这个:select SUBSTRING_INDEX(@input, ' ', (@count) * 2), ' ', -1) as xyz, som_cnt as count from abc cross join (select @count := 0) AS user_init 【参考方案1】:

您可以将用户定义的会话变量的初始化移动到派生表中,并将Cross Join 与您的其他表一起移动:

SELECT SUBSTRING_INDEX(@input, ' ', (@count) * 2), ' ', -1) AS xyz, 
       som_cnt AS `count` 
FROM abc
CROSS JOIN (SELECT @count := 0, 
                   @input := '22:4,33:4'
           ) AS user_init_vars 

【讨论】:

以上是关于SET 和 Select Query 结合 Run in a Single MySql Query 将结果传递到 pentaho的主要内容,如果未能解决你的问题,请参考以下文章

MySQL: Set user variable from result of query

bigquery python client.run_async_query 给出错误:409 已经存在

您不能指定目标表(SELECT Query 上的 UPDATE )?

是否可以在SQL中将SELECT函数与LAST函数结合使用?

MyBatis报错:A query was run and no Result Maps were found for the Mapped Statement

MyBatis报错:A query was run and no Result Maps were found for the Mapped Statement