private static List<String> selectCoordinateIdsByNodeIds(
      Connection con, List<String> fatherPaths, CoordinatePK pk) throws SQLException {
    ResultSet rs = null;

    String fatherPath = "";
    String whereClause = "";
    String fatherId = "";
    String rootFatherId = "";
    int axisToMatch = fatherPaths.size();
    if (fatherPaths != null) {
      Iterator<String> it = fatherPaths.iterator();
      while (it.hasNext()) {
        fatherPath = it.next();
        // enleve le premier /0/
        fatherPath = fatherPath.substring(1);
        fatherPath = fatherPath.substring(fatherPath.indexOf('/') + 1, fatherPath.length());
        // extrait l'id
        fatherId = fatherPath.substring(fatherPath.lastIndexOf('/') + 1, fatherPath.length());
        // extrait l'id de la racine
        rootFatherId = fatherPath.substring(0, fatherPath.indexOf('/'));
        whereClause += " nodeId = " + fatherId;
        whereClause += " or (nodeId = " + rootFatherId + " and coordinatesLeaf = '1') ";
        if (it.hasNext()) {
          whereClause += " Or ";
        }
      }
    }

    String selectStatement = "select coordinatesId, count(*) " + "from " + pk.getTableName() + " ";
    if (fatherPaths != null && fatherPaths.size() > 0) {
      selectStatement += "where " + whereClause;
    }
    selectStatement += " And instanceId = '" + pk.getComponentName() + "' ";
    selectStatement += " GROUP BY coordinatesId";

    PreparedStatement prepStmt = null;
    try {
      prepStmt = con.prepareStatement(selectStatement);
      rs = prepStmt.executeQuery();
      List<String> list = new ArrayList<String>();
      int coordinateId = 0;
      int nbMatches = 0;
      while (rs.next()) {
        coordinateId = rs.getInt(1);
        nbMatches = rs.getInt(2);
        if (nbMatches == axisToMatch) {
          list.add(new Integer(coordinateId).toString());
        }
      }
      return list;
    } finally {
      DBUtil.close(rs, prepStmt);
    }
  }