MySQL Родитель Ребенок с условием - PullRequest
0 голосов
/ 18 июня 2020

У меня есть таблица sql со столбцами: id, code, code_parent и тип кода:

 id            code             code_parent   type
 1             banane            fruit        CU 
 2             fruit              food        GU 
 3             food                 eat       BU
 4             tomato            vegetable    BU

Я пытаюсь написать al oop, чтобы для каждого кода был код родитель с уровнем BU, например, фрукт с идентификатором 2, имеет родительский элемент food, но с уровнем GU, отличным от BU, поэтому в этом случае я буду искать родительский элемент food, который я буду рассматривать как код, в id = 3 еда с уровнем 3, так что это желаемый результат, в сумме я получу

 id        code             code_parent   type
1             banana            food        BU 
2             fruit              food        BU
3             food                 eat       BU
4             tomato            vegetable    BU 

Я пробовал это, но это не работает, пожалуйста, если у вас есть идеи, помогите.

private void insertParentBu(List<Map<String, Object>> parentBu) {
    parentBu.forEach(row -> {
        String insertParentBu = "INSERT INTO `parent_bu` (`uo`,`parent_bu`,`type_parent`)" +
                "VALUES (?, ?, ?)";
        myrefJdbcTemplate.update(insertParentBu, preparedStatement -> {
            logger.info("Inserting uo {} , parent {}, level {}" , row.get("code"), row.get("code_parent") , row.get("level"));
            preparedStatement.setString(1, String.valueOf(row.get("code")));
            preparedStatement.setString(2, String.valueOf(row.get("code")));
            preparedStatement.setString(3, String.valueOf(row.get("level")));

        });
        String updateBuparent =  "UPDATE `parent_bu` SET `parent_bu` = ? , `type_parent` = ? WHERE `uo` = ? AND  type_parent <> 'BU' AND parent_bu <> '' ";
        myrefJdbcTemplate.update(updateBuparent, preparedStatement -> {
            preparedStatement.setString(1,String.valueOf(row.get("code_parent")));
            preparedStatement.setString(2,String.valueOf(row.get("level")));
            preparedStatement.setString(3,String.valueOf(row.get("code")));
        });


    }
    );


     } 
...