Search code examples
mysqlselectsql-delete

Change from SELECT to DELETE query


I've got below SELECT query selecting duplicate posts, my question is how to change that into DELETE?

SELECT a.ID, a.post_title, a.post_type, a.post_status 
FROM wp_posts AS a INNER JOIN (SELECT post_title, MIN( id ) AS min_id 
FROM wp_posts 
WHERE post_type = 'post' 
      AND post_status = 'publish' 
      GROUP BY post_title HAVING COUNT( * ) > 1 ) AS b 
      ON b.post_title = a.post_title 
      AND b.min_id <> a.id 
      AND a.post_type = 'post' 
      AND a.post_status = 'publish';

Solution

  • Take a look at this:

    DELETE a FROM
        wp_posts AS a
    INNER JOIN (
        SELECT
            post_title, MIN( id ) AS min_id
        FROM
            wp_posts
        WHERE
            post_type = 'post'
            AND post_status = 'publish'
        GROUP BY
            post_title
        HAVING COUNT( * ) > 1 ) AS b
    ON
        b.post_title = a.post_title
        AND b.min_id <> a.id
        AND a.post_type = 'post'
        AND a.post_status = 'publish';