The way to join the entity to itself and use joined fields in UI I have a list of locations and want to make a view of routes between them.
In classical sql the query will be:

SELECT src.name, dst.name FROM locations src LEFT JOIN locations вые ON src.name!=dst.name


I made hook_views_pre_execute:

function bd_create_views_pre_execute(\Drupal\views\ViewExecutable $view) {
  if ($view-&gt;id() == 'ways' &amp;&amp; $view-&gt;current_display == 'list') {
    $input = $view-&gt;exposed_raw_input;
    $query = $view-&gt;build_info['query'];
    $query-&gt;leftJoin('taxonomy_term_field_data', 'joj', 'taxonomy_term_field_data.tid != joj.tid');
    $query-&gt;addField('joj', 'name', 'label1');
    $view-&gt;build_info['query'] = $query;
    $view-&gt;build_info['count_query'] = $query;
  }
}


What is the way to bring label1 to views admin interface?

Or is there another way to join using only admin interface?
You'll need to change your starting approach; hook_views_pre_execute() is for modifying a View prior to execution, not for providing new table data to integrate into Views. You won't be able to plugin into the UI from this hook.

If you're wanting to plugin into D8 Views system so that it can be seen by the Views admin UI, you'll need to implement various plugins that the D8 Views modules will use to look up your table data, fields (columns) &amp; relationships (joins) that Views can use to build queries on your data table.

Start by following tutorial examples like Building Views Query Plugins for Drupal 8 or by looking at a well-known module with Views integration (e.g. node, user) to understand &amp; implement the various plugins that provide Views integration.