在解释任何事情之前,我会把你留在这里(我的总结):
rowsTable1(它具有SELECT的结果,它包含带Y列的X行)
rowsTable2(它具有SELECT的结果,它包含具有Z列的W行)
我想要的是插入每个rowsTable1行,rowsTable2中的一行,但是我需要通过rowsTable1中的ID来过滤rowsTable2。
例如,在rowsTable1中,我有一个名为superID的元素,另一个名为ultraID,rowsTable2也有这些元素,这就是我需要合并两行的。
我的问题是,如何过滤rowsTable2才能获得我想要的行?
rowsTable1.eachWithIndex{ rowT1, i ->
rowT1 << rowT2.firstRow([rowT1.superID],[rowT1.ultraID])
}
喜欢这个吗?
谢谢!
答案 0 :(得分:0)
看起来您想使用“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的所有唯一组合的“合并”行数据。请注意,rowsTable2中没有rowsTable1中存在的superID / ultraID组合的任何数据都将被忽略,而rowsTable1中存在的所有组合都应存在rowsTable2中。