Mysql 按重复列删除条目

Mysql 按重复列删除条目,mysql,sql,wordpress,phpmyadmin,Mysql,Sql,Wordpress,Phpmyadmin,因此,我正在处理wordpress中的一个奇怪问题,其中我有一个插件在数据库中创建重复条目,但我没有意识到这一点,因为wordpress通过增加post_id来“帮助”,使它能够完全忽略它应该覆盖的所有其他数据库值。我已经解决了造成这种情况的问题,但是我留下了一个非常满的数据库,其中有45000行,其中许多只是相同数据的副本 数据库名称为wp_postemta,包含meta_id、post_id、meta_key、meta_value列。我觉得我需要删除“meta_value”列的重复条目,保留

因此,我正在处理wordpress中的一个奇怪问题,其中我有一个插件在数据库中创建重复条目,但我没有意识到这一点,因为wordpress通过增加post_id来“帮助”,使它能够完全忽略它应该覆盖的所有其他数据库值。我已经解决了造成这种情况的问题,但是我留下了一个非常满的数据库,其中有45000行,其中许多只是相同数据的副本

数据库名称为wp_postemta,包含meta_id、post_id、meta_key、meta_value列。我觉得我需要删除“meta_value”列的重复条目,保留任何重复值的最新“post_id”。我在谷歌搜索了一段时间后提出了这个查询,它似乎应该做我需要它做的事情,只是我得到了一个版本错误,下面是代码和错误:

DELETE FROM wp_postmeta WHERE `meta_value` NOT IN (
    SELECT `meta_value` FROM wp_postmeta 
    GROUP BY `meta_value`
    ORDER BY `post_id` DESC
    LIMIT 1
);

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 

现在,我明白了这句话的意思,但我对sql的使用还不够熟悉,无法通过一个不同的查询来解决这个问题,该查询基本上会获取所有重复的“meta_值”,并删除那些不是最新的“post_id”的值。有没有人能给我指出正确的方向来寻找或帮助我找到更好的解决方案

这可能对你有用。它应该删除除具有最高post_id的行以外的所有行

DELETE oldposts.* FROM wp_postmeta oldposts
JOIN wp_postmeta newposts ON oldposts.meta_value = newposts.meta_value
   AND newposts.post_id > oldposts.post_id