MySql查询选择然后删除

时间:2013-08-04 09:33:13

标签: mysql

我使用mysql查询在Database中选择我的重复条目。

select id,DATE_FORMAT(cu_date,'%Y-%m-%d %T'),trunk_id ,count(*) from circuit_u
WHERE DATE_FORMAT(cu_date,'%Y-%m-%d') = '2013-01-26'
group by DATE_FORMAT(cu_date,'%Y-%m-%d %T'),trunk_id
HAVING count(*) > 1;

输出:

16347   2013-01-26 01:00:00 0   2
16372   2013-01-26 01:00:00 1   2
16397   2013-01-26 01:00:00 100 2
16422   2013-01-26 01:00:00 101 2
16447   2013-01-26 01:00:00 121 2
16472   2013-01-26 01:00:00 211 2
16497   2013-01-26 01:00:00 221 2
16522   2013-01-26 01:00:00 311 2

现在我想添加另一个命令来删除它们。

我尝试过很多次,但每次都失败了。

请帮忙。

2 个答案:

答案 0 :(得分:2)

你可以试试这个

   DELETE from circuit_u WHERE id IN ( select * from (
   select id from circuit_u
   WHERE DATE_FORMAT(cu_date,'%Y-%m-%d') = '2013-01-26'
   group by DATE_FORMAT(cu_date,'%Y-%m-%d %T'),trunk_id
   HAVING count(*) > 1 ) t
   )

答案 1 :(得分:0)

您不能在同一个SQL查询中访问和删除同一个表中的行,无论您如何尝试,相信我。您至少需要两个查询。

我之前用三个做过:“一个查询为ID创建一个临时内存表;另一个用你要删除的行ID填充它(或保持..);最后一个查询相关原始表和临时表从第一个表中删除行。“

(注意:如果使用临时表,则必须在同一连接中执行三个查询。)