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 中。
在解释任何事情之前,我会把我所拥有的留在这里(总结):
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 中。