/**
   * Return all pairs that is not in the same table but with the same type and the same column name
   */
  private List<Pair<TableColumn, TableColumn>> getNameMatchedPairs(List<TableInstance> tables) {
    if (tables.size() == 1) {
      return null;
    }

    List<Pair<TableColumn, TableColumn>> pairs = new LinkedList<Pair<TableColumn, TableColumn>>();
    List<TableColumn> allColumns = new LinkedList<TableColumn>();
    for (TableInstance t : tables) {
      allColumns.addAll(t.getColumns());
    }
    for (int i = 0; i < allColumns.size(); i++) {
      for (int j = i; j < allColumns.size(); j++) {
        TableColumn c1 = allColumns.get(i);
        TableColumn c2 = allColumns.get(j);
        if (c1.isKey() && c2.isKey()) {
          continue;
        }
        if (TableUtils.sameType(c1, c2)
            && !c1.getTableName().equals(c2.getTableName())
            && this.columnMatched(c1, c2)) {
          Pair<TableColumn, TableColumn> p = new Pair<TableColumn, TableColumn>(c1, c2);
          pairs.add(p);
        }
      }
    }

    return pairs;
  }