Мои мысли: - Правильный и внушительный способ - это фильтрация по sql самому запросу, например select * from table1,table2 where field_1 == field_2
. вам не нужны внешние вычисления.
Или если вы действительно хотите сделать это с помощью кода. пожалуйста, попробуйте предоставить пример данных таблицы и ожидаемый формат вывода только тогда мы можем помочь вам.
Ответ: Ваш код не собирает результаты, он просто заменяет последнюю строку eachRow()
. Это модифицированный код:
temp1 = []
temp2 = []
resultsA = sql.eachRow("SELECT id FROM Bikestores.production.brands"){
temp1.append(it[0])
}
resultsB = sql.eachRow("SELECT brand_id FROM Bikestores.dbo.sample"){
temp2.append(it[0]) // If u having one column why u getting values list
}
temp1.each{ brandA ->
temp2.each{ brandB ->
if(brandA==brandB){
log.info "$brandA : $brandB : True"
}
else{
log.info "$brandA : $brandB : False"
}
}
sql.close()
Примечание:
- Кажется, первый запрос
select * from
неверен. Это обеспечит все значения столбца. (ru знает об этом?) - Я не знаю, почему вы объединяете все значения в строке, используя
.values().join(", ")
, когда вы собираетесь сравнивать с brand_id
. Если я правильно укажу brands
таблица должна иметь столбец id
(интуитивно понятный). - Я думаю, вы не уверены, что вы получаете. Я надеюсь, что эти заметки прояснят и вдохновят вас задать лучший вопрос.
Обновление 1:
После просмотра образца, я думаю, это то, что вы ожидаете ....
def getResult(query, sql) // method changed
{
temp = []
sql.eachRow(query){
temp.add(it.toRowResult()) // changed
}
temp
}
resultsA = getResult("SELECT id, name, check FROM Bikestores.production.brands", sql)
resultsB = getResult("SELECT id, name, check FROM Bikestores.dbo.sample", sql)
resultsA.each{ brandA ->
resultsB.each{ brandB ->
if (brandA.id.trim() == brandB.id.trim()) // condition only for id match
log.info "[${brandA.name}][${brandB.name}] : ${brandA.name == brandB.name}"
}
sql.close()