diff --git a/core/modules/views/src/EntityViewsData.php b/core/modules/views/src/EntityViewsData.php
index 00c7039..b5cfeea 100644
--- a/core/modules/views/src/EntityViewsData.php
+++ b/core/modules/views/src/EntityViewsData.php
@@ -230,11 +230,21 @@ public function getViewsData() {
     // Load all typed data definitions of all fields. This should cover each of
     // the entity base, revision, data tables.
     $field_definitions = $this->entityManager->getBaseFieldDefinitions($this->entityType->id());
-    if ($table_mapping = $this->storage->getTableMapping()) {
+    if ($table_mapping = $this->storage->getTableMapping($field_definitions)) {
       // Fetch all fields that can appear in both the base table and the data
       // table.
       $entity_keys = $this->entityType->getKeys();
       $duplicate_fields = array_intersect_key($entity_keys, array_flip(['id', 'revision', 'bundle']));
+      // Make note of some information so that table joins can be applied for
+      // base fields that have dedicated tables.
+      $main_tables = array_filter([$base_table, $data_table, $revision_table, $revision_data_table]);
+      $dedicated_data_tables = [];
+      foreach ($field_definitions as $field_name => $field_definition) {
+        $storage_definition = $field_definition->getFieldStorageDefinition();
+        if ($revisionable && $storage_definition->isMultiple()) {
+          $dedicated_data_tables[] = $table_mapping->getFieldTableName($field_name);
+        }
+      }
       // Iterate over each table we have so far and collect field data for each.
       // Based on whether the field is in the field_definitions provided by the
       // entity manager.
@@ -242,6 +252,19 @@ public function getViewsData() {
       //   storage.
       // @todo https://www.drupal.org/node/2337511
       foreach ($table_mapping->getTableNames() as $table) {
+        // Provide joins for base fields with dedicated storage.
+        if (!in_array($table, $main_tables)) {
+          $data[$table]['table']['group'] = in_array($table, $dedicated_data_tables) ? $this->entityType->getLabel() : $this->t('@entity_type revision', ['@entity_type' => $this->entityType->getLabel()]);
+          $data[$table]['table']['provider'] = $this->entityType->getProvider();
+          $data[$table]['table']['join'][$views_base_table] = [
+            'left_field' => $base_field,
+            'field' => 'entity_id',
+            'extra' => array(
+              array('field' => 'deleted', 'value' => 0, 'numeric' => TRUE),
+            ),
+          ];
+        }
+
         foreach ($table_mapping->getFieldNames($table) as $field_name) {
           // To avoid confusing duplication in the user interface, for fields
           // that are on both base and data tables, only add them on the data
