public Table join(Table table) {
        // выполняем декартово произведение
        Table newTable = times(table);
        int size = newTable.parameters.size();
        // Сравниваем i-й и j-й параметры
        for (int i = 0; i < size; i++) {
            for (int j = i + 1; j < size; j++) {                
                // Если совпадают, то соответствующие столбцы надо склеивать
                if (newTable.parameters.get(i).equals(newTable.parameters.get(j))) {
                    // Склеивание i-го и j-го столбцов
                    // k - номер строки
                    for (int k = 0; k < newTable.attributes.size(); k++) {
                        // Сравниваем [k][i]-й элемент с [k][j]-м элементом
                        // Если они не равны, то удаляем k-ю строку
                        if (!newTable.attributes.get(k).get(i).equals(newTable.attributes.get(k).get(j))) {
                            newTable.attributes.remove(k--);
                        }
                    }
                }
            }
        }
        return newTable;
    }