删除同一表中JOIN中多个列的重复项

时间:2014-12-08 17:23:06

标签: mysql delete-row

我试图通过加入相同的表格进行删除:

DELETE FROM `sp10_seo_url` AS sp1 JOIN
( 
        SELECT seo_url_pk, COUNT(*) AS maxc 
        FROM `sp10_seo_url` 
        GROUP BY seo_url_entity_type, seo_url_entity_id, seo_url_language_fk 
        HAVING maxc  > 1 
) AS sp2

ON sp1.seo_url_pk = sp2.seo_url_pk

但是我收到了一个mysql错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS sp1 JOIN ( SELECT seo_url_pk, COUNT(*) AS maxc FROM `sp10_s' at line 1

我不确定错误在哪里。内部查询运行正常并返回预期的结果集。 " ON"密钥被正确命名(因为我们正在谈论相同的表)。

我猜这个查询的想法非常清楚(清理不同行的表格对于三个" group by"列具有相同的值集。是否有其他方法可以执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:1)

你可以"作弊"具有双重间接的mysql(如此处所述Deleting a row based on the max value):

delete from `sp10_seo_url`
where seo_url_pk in (
  select seo_url_pk from (
  SELECT seo_url_pk
  FROM `sp10_seo_url` sp1,
  (
    SELECT seo_url_entity_type, seo_url_entity_id, seo_url_language_fk 
    FROM `sp10_seo_url` 
    GROUP BY seo_url_entity_type, seo_url_entity_id, seo_url_language_fk 
    HAVING count(*)  > 1 
  ) sp2
  where sp1.seo_url_entity_type    = sp2.seo_url_entity_type
  and   sp1.seo_url_entity_id      = sp2.seo_url_entity_id
  and   sp1.seo_url_language_fk    = sp2.seo_url_language_fk
  ) t
  );

http://sqlfiddle.com/#!2/899ff5/1

相关问题