diff --git a/core/lib/Drupal/Core/Database/Query/Update.php b/core/lib/Drupal/Core/Database/Query/Update.php
index 5ffdb33..4564473 100644
--- a/core/lib/Drupal/Core/Database/Query/Update.php
+++ b/core/lib/Drupal/Core/Database/Query/Update.php
@@ -245,7 +245,7 @@ public function __toString() {
     $fields = $this->fields;
     $update_fields = array();
     foreach ($this->expressionFields as $field => $data) {
-      $update_fields[] = $field . '=' . $data['expression'];
+      $update_fields[] = $field . '= (' . $data['expression'] . ')';
       unset($fields[$field]);
     }
 
diff --git a/core/modules/system/lib/Drupal/system/Tests/Database/UpdateComplexTest.php b/core/modules/system/lib/Drupal/system/Tests/Database/UpdateComplexTest.php
index 4778363..812b446 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Database/UpdateComplexTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Database/UpdateComplexTest.php
@@ -132,4 +132,18 @@ function testUpdateOnlyExpression() {
     $after_age = db_query('SELECT age FROM {test} WHERE name = :name', array(':name' => 'Ringo'))->fetchField();
     $this->assertEqual($before_age + 4, $after_age, 'Age updated correctly');
   }
+
+  /**
+   * Test UPDATE with a subselect value.
+   */
+  function testSubSelectUpdate() {
+    $subselect = db_select('test', 't');
+    $subselect->addExpression('MAX(age)', 'max_age');
+    db_update('test_task')
+      ->expression('priority', $subselect)
+      ->execute();
+    $results = array_map('intval', db_query('SELECT priority FROM {test_task}')->fetchCol());
+    $this->assertIdentical(array(28), array_unique($results));
+  }
+
 }
