diff --git a/core/modules/views/src/ManyToOneHelper.php b/core/modules/views/src/ManyToOneHelper.php
index cb2e5754a8..f4619e7953 100644
--- a/core/modules/views/src/ManyToOneHelper.php
+++ b/core/modules/views/src/ManyToOneHelper.php
@@ -84,11 +84,11 @@ public function addTable($join = NULL, $alias = NULL) {
     // Cycle through the joins. This isn't as error-safe as the normal
     // ensurePath logic. Perhaps it should be.
     $r_join = clone $join;
-    while ($r_join->leftTable != $base_table) {
+    while (!empty($r_join) && $r_join->leftTable != $base_table) {
       $r_join = HandlerBase::getTableJoin($r_join->leftTable, $base_table);
     }
     // If we found that there are tables in between, add the relationship.
-    if ($r_join->table != $join->table) {
+    if (!empty($r_join) && $r_join->table != $join->table) {
       $relationship = $this->handler->query->addRelationship($this->handler->table . '_' . $r_join->table, $r_join, $r_join->table, $this->handler->relationship);
     }
 
diff --git a/core/modules/views/tests/src/Unit/ManyToOneHelperTest.php b/core/modules/views/tests/src/Unit/ManyToOneHelperTest.php
new file mode 100644
index 0000000000..cffdfd86f1
--- /dev/null
+++ b/core/modules/views/tests/src/Unit/ManyToOneHelperTest.php
@@ -0,0 +1,94 @@
+<?php
+
+namespace Drupal\Tests\views\Unit;
+
+use Drupal\Tests\UnitTestCase;
+use Drupal\views\ManyToOneHelper;
+use Drupal\views\Plugin\views\HandlerBase;
+use Drupal\views\Plugin\views\join\JoinPluginBase;
+use Drupal\views\Plugin\views\query\Sql;
+use Drupal\views\ViewExecutable;
+use Drupal\views\ViewsData;
+use Prophecy\Argument;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+
+/**
+ * @coversDefaultClass \Drupal\views\ManyToOneHelper
+ * @group views
+ */
+class ManyToOneHelperTest extends UnitTestCase {
+
+  /**
+   * @covers ::addTable
+   */
+  public function testAddTable() {
+    $handler = $this->prophesize(HandlerBase::class);
+    $view = $this->prophesize(ViewExecutable::class);
+    $join = $this->prophesize(JoinPluginBase::class);
+    $query = $this->prophesize(Sql::class);
+
+    $join->leftTable = 'base_table';
+    $join->table = 'base_table';
+
+    $query->addTable('table', 'relationship', Argument::any(), NULL)
+      ->willReturn('alias');
+
+    $query->relationships = [
+      'relationship' => [
+        'base' => 'base_table',
+      ],
+    ];
+
+    $handler->getJoin()->willReturn($join->reveal());
+    $handler->relationship = 'relationship';
+    $handler->table = 'table';
+    $handler->field = 'field';
+    $handler->value = 'value';
+    $handler->view = $view->reveal();
+    $handler->query = $query->reveal();
+
+    $many_to_one_helper = new ManyToOneHelper($handler->reveal());
+    $this->assertEquals('alias', $many_to_one_helper->addTable());
+  }
+
+  /**
+   * @covers ::addTable
+   */
+  public function testAddTableWithNonExistingTable() {
+    $container = new ContainerBuilder();
+    $views_data = $this->prophesize(ViewsData::class);
+    // Test a non-existent table.
+    $views_data->get('non_existing_left_table')->willReturn('');
+    $container->set('views.views_data', $views_data->reveal());
+    \Drupal::setContainer($container);
+
+    $handler = $this->prophesize(HandlerBase::class);
+    $view = $this->prophesize(ViewExecutable::class);
+    $join = $this->prophesize(JoinPluginBase::class);
+    $query = $this->prophesize(Sql::class);
+
+    $join->leftTable = 'non_existing_left_table';
+    $join->table = 'base_table';
+
+    $query->addTable('table', 'relationship', Argument::any(), NULL)
+      ->willReturn('alias');
+
+    $query->relationships = [
+      'relationship' => [
+        'base' => 'base_table',
+      ],
+    ];
+
+    $handler->getJoin()->willReturn($join->reveal());
+    $handler->relationship = 'relationship';
+    $handler->table = 'table';
+    $handler->field = 'field';
+    $handler->value = 'value';
+    $handler->view = $view->reveal();
+    $handler->query = $query->reveal();
+
+    $many_to_one_helper = new ManyToOneHelper($handler->reveal());
+    $this->assertEquals('alias', $many_to_one_helper->addTable());
+  }
+
+}
