mysql – 使用join从表中删除重复的行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 使用join从表中删除重复的行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2072字,纯文字阅读大概需要3分钟。
内容图文
我有两个表来包含国家的州(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 |
欲了解更多,请参阅DELETE Syntax of MySQL.
内容总结
以上是互联网集市为您收集整理的mysql – 使用join从表中删除重复的行全部内容,希望文章能够帮你解决mysql – 使用join从表中删除重复的行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。