我有一张游戏桌,描述如下:
+---------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| date | date | NO | | NULL | |
| time | time | NO | | NULL | |
| hometeam_id | int(11) | NO | MUL | NULL | |
| awayteam_id | int(11) | NO | MUL | NULL | |
| locationcity | varchar(30) | NO | | NULL | |
| locationstate | varchar(20) | NO | | NULL | |
+---------------+-------------+------+-----+---------+----------------+
但是每场比赛的表中都有一个重复的条目,因为每场比赛都在两支球队的赛程中。我是否可以使用一条sql语句根据相同的日期,时间,hometeam_id,awayteam_id,locationcity和locationstate字段浏览并删除所有重复项?
您应该能够执行相关的子查询来删除数据。查找所有重复的行,并删除除ID最小的行以外的所有行。对于MYSQL,需要使用内部联接(功能等同于EXISTS),如下所示:
delete games from games inner join
(select min(id) minid, date, time,
hometeam_id, awayteam_id, locationcity, locationstate
from games
group by date, time, hometeam_id,
awayteam_id, locationcity, locationstate
having count(1) > 1) as duplicates
on (duplicates.date = games.date
and duplicates.time = games.time
and duplicates.hometeam_id = games.hometeam_id
and duplicates.awayteam_id = games.awayteam_id
and duplicates.locationcity = games.locationcity
and duplicates.locationstate = games.locationstate
and duplicates.minid <> games.id)
要进行测试,请替换delete games from games
为select * from games
。不要只在您的数据库上运行删除操作:-)
问题内容: 我使用以下方式列出了重复项: 现在,如何删除除一条消息以外的所有消息(我正在尝试删除重复项,以便可以在上应用唯一索引)。 问题答案: 使用和分配行号,以便删除重复对中除一个以外的所有行。
我试图通过比较对象中的多个字段来从数组中找到重复的对象。 我想将对象的两个字段与同一数组的其他对象进行比较。 我想露营只是名称和 lname,忽略我的对象内的第 3 个字段 如何查找和删除输出如下的重复对象
问题内容: 我有一个重复的表事务。我想保留具有最小id的记录,并基于四个字段DATE,AMOUNT,REFNUMBER,PARENTFOLDERID删除所有重复项。我写了这个查询,但是我不确定这是否可以有效地编写。您认为有更好的方法吗?我问是因为我担心运行时间。 问题答案: 做这样的事情可能会更有效
问题内容: 我在一个表中有多组重复项(一个表有3条记录,另一个表有2条记录,等等)-存在多于1行的多行。 以下是我想删除它们的方法,但是无论有多少重复,我都必须运行脚本: 这在一定程度上效果很好。我需要为每组重复项运行此命令,然后它只会删除1(这是我现在需要的全部)。 问题答案: 如果表上有键列,则可以使用它来唯一地标识表中的“不同”行。 只需使用子查询来标识唯一行的ID列表,然后删除此集合之外的
问题内容: 在我们的系统中,我们每小时从外部数据库导入一次。由于导入脚本中的错误,现在有一些重复的记录。 如果任何记录具有和,则视为重复。 我可以运行什么代码来查找和删除这些重复项? 我在玩这个: 它似乎返回了一些重复项,但是我不确定如何从那里删除? 有任何想法吗? 问题答案: 您可以尝试以下方法: 还是纯sql:
问题内容: 这可能很容易,但这是星期一早上。我有两个表: 表格1: 表2: 忽略其他字段…我想要一个SQL DELETE语句,该语句将删除存在与Table1.group相等的Table2.group的Table1中的所有行。因此,如果Table1的一行具有group = 69,则当且仅当Table2中存在group = 69的行时,才应删除该行。 感谢您的任何帮助。 问题答案: 我认为这是您想要的