我删除任务有困难,需要你的帮助。 该数据库涉及在不同城市销售的交易(行数超过400.000)。我的任务是删除在多个城市同时销售的同一笔交易。但是,同一笔交易可能会在不同时间在一个城市出现几次。相同的交易具有相同的标题(至少前12个特征)。
以下是简化数据样本
id; city_id; starting_date; title;
1; A; 30.01.2013; chain hotel A coupon
2; B; 30.01.2013; chain hotel A coupon
3; C; 30.01.2013; chain hotel A coupon
4; A; 01.03.2013; chain hotel A coupon
5; A; 06.05.2013; restaurant A coupon
6; A; 30.05.2013; restaurant A coupon
我想删除在多个城市同时销售的所有交易,但保持在不同时间在城市中销售的交易。以下是我的代码:
DELETE FROM `table`
WHERE `id` in
(SELECT t2.`id` from
(
SELECT `id`
FROM `table`
GROUP BY LEFT(title, 35)
HAVING COUNT(*)>1
AND COUNT(DISTINCT `city_id`)>1)
as t2)
此代码的问题在于,在运行此代码后,只移动了一行重复行。有更好的解决方案吗?
答案 0 :(得分:1)
最好的解决方案之一。 Fiddle
delete t.* from `table` t inner join(
select `starting_date`, `title`
FROM `table`
GROUP BY LEFT(title, 35) , starting_date
having count(*) >1 and COUNT(DISTINCT `city_id`)>1) dup on dup.`Starting_date` = t.`starting_date`
and left (dup.`title`,35) = left(t.`title`,35)
查询中的问题是select查询中的GROUP BY子句只返回一行。
答案 1 :(得分:0)
我希望我能够发表评论,因为这不是一个真正的答案。但是,您是否尝试隔离子查询以查看您的SELECT
ID FROM
表GROUP BY LEFT(title, 35) HAVING COUNT(*)>1 AND COUNT(DISTINCT
city_id )>1
是否返回多行?如果是这样,请返回一步,检查是否Select t2.id from (Subquery)
并查看是否返回多个结果等等。