diff --git a/core/modules/locale/locale.install b/core/modules/locale/locale.install
index 11d1873455a0e8e9b6467951f15dcf85ed1fa17f..acf3a80ce3de8a2099719d34782c3369444b06e3 100644
--- a/core/modules/locale/locale.install
+++ b/core/modules/locale/locale.install
@@ -386,88 +386,90 @@ function locale_update_8005() {
   }
   $plural_lids = array_unique($plural_lids);
 
-  // Look up all translations for these source strings. Ordering by language
-  // will group the strings by language, the 'plid' order will get the
-  // strings in singular/plural order and 'plural' will get them in precise
-  // sequential order needed.
-  $results = db_query("SELECT s.lid, s.source, t.translation, t.plid, t.plural, t.language FROM {locales_source} s LEFT JOIN {locales_target} t ON s.lid = t.lid WHERE s.lid IN (:lids) ORDER BY t.language, t.plid, t.plural", array(':lids' => $plural_lids));
-
-  // Collect the strings into an array and combine values as we go.
-  $strings = array();
-  $parents_to_sources = array();
-  $remove_lids = array();
-  foreach ($results as $child) {
-    $strings[$child->language][$child->lid] = array(
-      'source' => array($child->source),
-      'translation' => array($child->translation),
-    );
-
-    if (empty($child->plid)) {
-      // Non-children strings point to themselves as parents. This makes it
-      // easy to look up the utmost parents for any plurals.
-      $parents_to_sources[$child->lid] = $child->lid;
-    }
-    else {
-      // Children strings point to their utmost parents. Because we get data
-      // in PLID order, we can ensure that all previous parents have data now,
-      // so we can just copy the parent's data about their parent, etc.
-      $parents_to_sources[$child->lid] = $parents_to_sources[$child->plid];
-
-      // Append translation to the utmost parent's translation string.
-      $utmost_parent = &$strings[$child->language][$parents_to_sources[$child->plid]];
-      // Drop the Drupal-specific numbering scheme from the end of plural
-      // formulas.
-      $utmost_parent['translation'][] = str_replace('@count[' . $child->plural .']', '@count', $child->translation);
-      if (count($utmost_parent['source']) < 2) {
-        // Append source to the utmost parent's source string only if it is the
-        // plural variant. Further Drupal specific plural variants are not to be
-        // retained for source strings.
-        $utmost_parent['source'][] = $child->source;
+  if (!empty($plural_lids)) {
+    // Look up all translations for these source strings. Ordering by language
+    // will group the strings by language, the 'plid' order will get the
+    // strings in singular/plural order and 'plural' will get them in precise
+    // sequential order needed.
+    $results = db_query("SELECT s.lid, s.source, t.translation, t.plid, t.plural, t.language FROM {locales_source} s LEFT JOIN {locales_target} t ON s.lid = t.lid WHERE s.lid IN (:lids) ORDER BY t.language, t.plid, t.plural", array(':lids' => $plural_lids));
+
+    // Collect the strings into an array and combine values as we go.
+    $strings = array();
+    $parents_to_sources = array();
+    $remove_lids = array();
+    foreach ($results as $child) {
+      $strings[$child->language][$child->lid] = array(
+        'source' => array($child->source),
+        'translation' => array($child->translation),
+      );
+
+      if (empty($child->plid)) {
+        // Non-children strings point to themselves as parents. This makes it
+        // easy to look up the utmost parents for any plurals.
+        $parents_to_sources[$child->lid] = $child->lid;
       }
+      else {
+        // Children strings point to their utmost parents. Because we get data
+        // in PLID order, we can ensure that all previous parents have data now,
+        // so we can just copy the parent's data about their parent, etc.
+        $parents_to_sources[$child->lid] = $parents_to_sources[$child->plid];
+
+        // Append translation to the utmost parent's translation string.
+        $utmost_parent = &$strings[$child->language][$parents_to_sources[$child->plid]];
+        // Drop the Drupal-specific numbering scheme from the end of plural
+        // formulas.
+        $utmost_parent['translation'][] = str_replace('@count[' . $child->plural .']', '@count', $child->translation);
+        if (count($utmost_parent['source']) < 2) {
+          // Append source to the utmost parent's source string only if it is the
+          // plural variant. Further Drupal specific plural variants are not to be
+          // retained for source strings.
+          $utmost_parent['source'][] = $child->source;
+        }
 
-      // All plural variant LIDs are to be removed with their translations.
-      // Only the singular LIDs will be kept.
-      $remove_lids[] = $child->lid;
+        // All plural variant LIDs are to be removed with their translations.
+        // Only the singular LIDs will be kept.
+        $remove_lids[] = $child->lid;
+      }
     }
-  }
 
-  // Do updates for all source strings and all translations.
-  $updated_sources = array();
-  foreach ($strings as $langcode => $translations) {
-    foreach($translations as $lid => $translation) {
-      if (!in_array($lid, $updated_sources)) {
-        // Only update source string if not yet updated. We merged these within
-        // the translation lookups because plural information was only avilable
-        // with the translation, but we don't need to save it again for every
-        // language.
-        db_update('locales_source')
-          ->fields(array(
+    // Do updates for all source strings and all translations.
+    $updated_sources = array();
+    foreach ($strings as $langcode => $translations) {
+      foreach($translations as $lid => $translation) {
+        if (!in_array($lid, $updated_sources)) {
+          // Only update source string if not yet updated. We merged these within
+          // the translation lookups because plural information was only avilable
+          // with the translation, but we don't need to save it again for every
+          // language.
+          db_update('locales_source')
+            ->fields(array(
             'source' => implode(LOCALE_PLURAL_DELIMITER, $translation['source']),
           ))
+            ->condition('lid', $lid)
+            ->execute();
+          $updated_sources[] = $lid;
+        }
+        db_update('locales_target')
+          ->fields(array(
+          'translation' => implode(LOCALE_PLURAL_DELIMITER, $translation['translation']),
+        ))
           ->condition('lid', $lid)
+          ->condition('language', $langcode)
           ->execute();
-        $updated_sources[] = $lid;
       }
-      db_update('locales_target')
-        ->fields(array(
-          'translation' => implode(LOCALE_PLURAL_DELIMITER, $translation['translation']),
-        ))
-        ->condition('lid', $lid)
-        ->condition('language', $langcode)
-        ->execute();
     }
-  }
 
-  // Remove all plural LIDs from source and target. only keep those which were
-  // originally used for the singular strings (now updated to contain the
-  // serialized version of plurals).
-  $remove_lids = array_unique($remove_lids);
-  db_delete('locales_source')
-    ->condition('lid', $remove_lids, 'IN')
-    ->execute();
-  db_delete('locales_target')
-    ->condition('lid', $remove_lids, 'IN')
-    ->execute();
+    // Remove all plural LIDs from source and target. only keep those which were
+    // originally used for the singular strings (now updated to contain the
+    // serialized version of plurals).
+    $remove_lids = array_unique($remove_lids);
+    db_delete('locales_source')
+      ->condition('lid', $remove_lids, 'IN')
+      ->execute();
+    db_delete('locales_target')
+      ->condition('lid', $remove_lids, 'IN')
+      ->execute();
+  }
 
   // Drop the primary key because it contains 'plural'.
   db_drop_primary_key('locales_target');
diff --git a/core/modules/simpletest/tests/upgrade/upgrade.language.test b/core/modules/simpletest/tests/upgrade/upgrade.language.test
index ecbbd12229a9c264b9e222dc39c963940b4dd276..192f00c3248532469400e88a05787cc74dd6b61b 100644
--- a/core/modules/simpletest/tests/upgrade/upgrade.language.test
+++ b/core/modules/simpletest/tests/upgrade/upgrade.language.test
@@ -136,4 +136,18 @@ class LanguageUpgradePathTestCase extends UpgradePathTestCase {
     $domains = locale_language_negotiation_url_domains();
     $this->assertTrue($domains['ca'] == $language_domain, t('Language domain for Catalan properly upgraded.'));
   }
+
+  /**
+   * Tests upgrading translations without plurals.
+   */
+  public function testLanguageNoPluralsUpgrade() {
+    // Remove all plural translations from the database.
+    db_delete('locales_target')->condition('plural', 0, '<>')->execute();
+
+    $this->assertTrue($this->performUpgrade(), t('The upgrade was completed successfully.'));
+
+    // Check if locale_update_8005() is succesfully completed by checking
+    // whether index 'plural' has been removed.
+    $this->assertFalse(db_index_exists('locales_target', 'plural'), t('Translations without plurals upgraded.'));
+  }
 }