mysql 去重复join_mysql – 使用join从表中删除重复的行

我有两个表来包含国家的州(state_table)和city(city_table)

city表具有state_id以将其与state_table相关联

这两个表都已包含数据.

现在问题

城市表包含一个州内一个城市的多个条目.而另一个城市可能也可能没有相同的城市名称

例如:cityone将在city table中出现5次出现,stateone出现2次出现

那么我将如何编写一个查询来为每个州保留一个城市并删除其余的城市呢?

架构如下

CREATE TABLE IF NOT EXISTS `city_table` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`state_id` int(11) NOT NULL,

`city` varchar(25) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `state_table` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`state` varchar(15) NOT NULL,

`country_id` smallint(5) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

这是样本数据

id state_id city

1 1 city_one

2 1 city_two

3 1 city_one

4 1 city_two

5 2 city_one

6 3 city_three

7 3 city_one

8 3 city_three

9 4 city_four

10 4 city_five

原始表有152,451行

解决方法:

如果要删除具有相同state_id(重复记录)的重复城市,可以通过city和state_id对它们进行分组并使用MIN或MAX函数来实现:

在删除查询之前,您的表格看起来像

| ID | STATE_ID | CITY |

------------------------------

| 1 | 1 | city_one |

| 2 | 1 | city_two |

| 3 | 1 | city_one |

| 4 | 1 | city_two |

| 5 | 2 | city_one |

| 6 | 3 | city_three |

| 7 | 3 | city_one |

| 8 | 3 | city_three |

| 9 | 4 | city_four |

| 10 | 4 | city_five |

您可以使用以下查询删除重复记录:

DELETE city_table

FROM city_table

LEFT JOIN

(SELECT MIN(id) AS IDs FROM city_table

GROUP BY city,state_id

)A

ON city_table.ID = A.IDs

WHERE A.ids IS NULL;

应用上述查询后,您的表格将如下所示:

| ID | STATE_ID | CITY |

------------------------------

| 1 | 1 | city_one |

| 2 | 1 | city_two |

| 5 | 2 | city_one |

| 6 | 3 | city_three |

| 7 | 3 | city_one |

| 9 | 4 | city_four |

| 10 | 4 | city_five |

标签:duplicate-removal,sql,mysql,sql-delete,duplicates

来源: https://codeday.me/bug/20191008/1871231.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值