我有一个resultset,它返回一个(重复的)名称列表,其中包含一些与该名称相关联的sql条件。它是一个2列的结果集。看起来是这样的:
____________________________________
|id | data |
|__________________________________|
|john | sql1 |
|john | sql2 |
|adam | sql1 |
|jack | sql3 |
|jack | sql2 |
____________________________________
我想构建一个sql查询,如下所示:
select *, 'john' as id from table_x where sql1 or sql2
union
select *, 'adam' as id table_x where sql1
union
select *, 'jack' as id from table_x where sql3 or sql2;
只需在while循环中使用res.next()并在那里执行一些魔术,就可以做到这一点吗?我曾想过使用一个二维数组或一个Map来首先存储结果集,然后迭代它来完成这项工作,但我想知道是否有更好/更简单的方法来完成这项工作。
3条答案
按热度按时间2exbekwf1#
您将收到一个结果集,它是所有3个选择的并集。如果要按id列分类,只需遍历结果集,并基于id列的值处理当前行(例如,使用id value作为Map的键)。
disho6za2#
看来 Impala 有一个群concat函数,所以你可以利用它来取消一个步骤。
(表y是初始结果集来自的表
然后简单地循环:
这是未经测试,但你明白的。您可以通过使用stringutils.join或.collapse simlar删除一些行。有很多string utils类。
如果您足够努力的话,您可能可以完全用sql生成这个,但至少这会更好一些。
编辑:我会把它一起来,你可以提供一个分隔符给组\u concat,这样你就可以执行这个sql来启动
这样你就不必组装 predicate ,只需附加整个 predicate 。
5hcedyr03#
是的,有可能。
如果按
id
,您可以使用普通ResultSet
循环,并检查id
价值观。无需二维阵列或Map
,只是一个StringBuilder
用于以增量方式构建所讨论的sql。