很抱歉有这么大的标题...我试着描述得足够清楚。我有一个表,其中包含事件出席数据,其中包含一些错误数据。表的定义有点像这样:
id (row id)
date
company_name
attendees在某些情况下,对于给定的日期,有两个条目匹配company_name和date,但一个条目具有attendees=0,另一个条目具有attendees>0。在这些情况下,我想丢弃attendees=0。
我知道您不能在删除时连接同一个表,因此请将此查询视为伪代码,它显示了我想要完成的任务。
DELETE FROM attendance a WHERE a.attendees=0 AND a.date IN (SELECT b.date FROM attendance b WHERE b.attendees > 0 AND b.company_name = a.company_name);我还尝试用要删除的行的IN填充一个临时表,但该查询由于IN (SELECT ...)挂起子句。我的表有数千行,所以这只会耗尽CPU,然后超时。
发布于 2012-10-11 03:24:37
这个丑陋的东西应该可以工作(使用别名许可来避免You can't specify target table for update in FROM clause错误)
DELETE FROM attendance
WHERE (attendees, date, company_name)
IN (SELECT c.a, c.d, c.c
FROM
(SELECT MIN(attendees) a, date d, company_name c
FROM attendance
GROUP BY date, company_name
HAVING COUNT(*) > 1) as c);https://stackoverflow.com/questions/12826606
复制相似问题