Groovy - 合并两个 SQL Select 结果

Groovy - Joining two SQL Select results

在解释任何事情之前,我会把我所拥有的留在这里(总结):

rowsTable1(它有一个 SELECT 的结果,它包含 X 行和 Y 列)

rowsTable2(它有一个 SELECT 的结果,它包含 W 行和 Z 列)

我想要的是在每个 rowsTable1 行中插入 rowsTable2 中的一行,但我需要通过我在 rowsTable1 中的 ID 过滤 rowsTable2。

例如,在 rowsTable1 中,我有一个名为 superID 的元素和另一个名为 ultraID 的元素,rowsTable2 也有这些元素,这就是我需要合并两行的内容。

我的问题是,如何过滤 rowsTable2 以仅获取我想要的行?

rowsTable1.eachWithIndex{ rowT1, i ->
    rowT1 << rowT2.firstRow([rowT1.superID],[rowT1.ultraID])
}

像这样?

谢谢!

您似乎想使用 "collect" 创建复合地图,因为我认为您不能更改从 SQL 返回的行列表查询。

这是一个可以满足您要求的示例:

// if we start with this data (pretend it's what came back from your queries)
def rowsTable1 = [ [superID :1, ultraID :2, c:'a1b2'], [superID :1, ultraID :3, c:'a1b3'] ]
def rowsTable2 = [ [superID :1, ultraID :3, d:'a1b3extra'], [superID :3, ultraID :4, d:'unfound'], [superID :1, ultraID :2, d:'a1b2extra']]

// Now, join the rows to a List of new "row-like" Maps when superID and ultraID are equal.
def ret = rowsTable1.collect { T1row -> 
    [:] << T1row << rowsTable2.find { it.superID == T1row.superID  && it.ultraID  == T1row.ultraID } 
}

ret 现在应该是一个映射列表,每个映射都是 rowsTable1 中 superID 和 ultraID 的所有唯一组合的 "merged" 行数据。请注意,rowsTable2 中没有 rowsTable1 中存在的 superID/ultraID 组合的任何数据都将被忽略,并且 rowsTable1 中存在的所有组合都应存在于 rowsTable2 中。