diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php
index d0bc1a3..1ab1601 100644
--- a/src/wp-includes/post.php
+++ b/src/wp-includes/post.php
@@ -2405,8 +2405,9 @@ function wp_delete_post( $postid = 0, $force_delete = false ) {
 		// Point children of this page to its parent, also clean the cache of affected children.
 		$children_query = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_parent = %d AND post_type = %s", $postid, $post->post_type );
 		$children = $wpdb->get_results( $children_query );
-
-		$wpdb->update( $wpdb->posts, $parent_data, $parent_where + array( 'post_type' => $post->post_type ) );
+		if ( count( $children ) ) {
+			$wpdb->update( $wpdb->posts, $parent_data, $parent_where + array( 'post_type' => $post->post_type ) );
+		}
 	}
 
 	// Do raw query. wp_get_post_revisions() is filtered.
diff --git a/tests/phpunit/tests/post.php b/tests/phpunit/tests/post.php
index 71fe55e..6c13225 100644
--- a/tests/phpunit/tests/post.php
+++ b/tests/phpunit/tests/post.php
@@ -1229,4 +1229,16 @@ class Tests_Post extends WP_UnitTestCase {
 		$this->assertEquals(get_date_from_gmt($post['post_date_gmt']), $out->post_date);
 		$this->assertEquals($post['post_date_gmt'], $out->post_date_gmt);
 	}
+
+	function test_wp_delete_post_reassign_hierarchical_post_type() {
+		$grandparent_page_id = self::factory()->post->create( array( 'post_type' => 'page' ) );
+		$parent_page_id = self::factory()->post->create( array( 'post_type' => 'page', 'post_parent' => $grandparent_page_id ) );
+		$page_id = self::factory()->post->create( array( 'post_type' => 'page', 'post_parent' => $parent_page_id ) );
+		$this->assertEquals( $parent_page_id, get_post( $page_id )->post_parent );
+		wp_delete_post( $parent_page_id, true );
+		$this->assertEquals( $grandparent_page_id, get_post( $page_id )->post_parent );
+		wp_delete_post( $grandparent_page_id, true );
+		$this->assertEquals( 0, get_post( $page_id )->post_parent );
+	}
+
 }
