@Override public void populateIndicatorGroupSetStructure(List<IndicatorGroupSet> groupSets) { String sql = "insert into " + CreateIndicatorGroupSetTableStatement.TABLE_NAME + " " + "select i.indicatorid as indicatorid, i.name as indicatorname, "; for (IndicatorGroupSet groupSet : groupSets) { sql += "(" + "select ig.name from indicatorgroup ig " + "inner join indicatorgroupmembers igm on igm.indicatorgroupid = ig.indicatorgroupid " + "inner join indicatorgroupsetmembers igsm on igsm.indicatorgroupid = igm.indicatorgroupid and igsm.indicatorgroupsetid = " + groupSet.getId() + " " + "where igm.indicatorid = i.indicatorid " + "limit 1) as " + statementBuilder.columnQuote(groupSet.getName()) + ", "; sql += "(" + "select ig.uid from indicatorgroup ig " + "inner join indicatorgroupmembers igm on igm.indicatorgroupid = ig.indicatorgroupid " + "inner join indicatorgroupsetmembers igsm on igsm.indicatorgroupid = igm.indicatorgroupid and igsm.indicatorgroupsetid = " + groupSet.getId() + " " + "where igm.indicatorid = i.indicatorid " + "limit 1) as " + statementBuilder.columnQuote(groupSet.getUid()) + ", "; } sql = TextUtils.removeLastComma(sql) + " "; sql += "from indicator i"; log.info("Populate indicator group set structure SQL: " + sql); jdbcTemplate.execute(sql); }