我想在现有表中添加复杂的唯一键.主要从4个领域(包括user_id
,game_id
,date
,time
).但是表有非唯一的行.我知道我可以删除所有重复的日期,然后添加复杂的密钥.
可能存在另一种解决方案而不搜索所有重复数 (比如添加唯一的忽略等).
UPD我搜索过,如何删除重复的mysql行 - 我认为这是很好的解决方案. 仅使用MySQL查询删除重复项?
我有一个包含4列的表:ID,类型,所有者,描述.ID是AUTO_INCREMENT PRIMARY KEY,现在我想:
ALTER IGNORE TABLE `my_table`
ADD UNIQUE (`type`, `owner`);
Run Code Online (Sandbox Code Playgroud)
当然,我有几个类型='Apple'和owner ='Apple CO'的记录.所以我的问题是哪个记录将成为ALTER TABLE之后留下的特殊记录,一个ID最小的记录,或者最新插入的记录?
可能重复:
如何删除重复的行?
仅使用MySQL查询删除重复项?
我有一个大约14M条目的大桌子.表类型是MyISAM而不是InnoDB.
不幸的是,我在这个表中有一些重复的条目,我发现有以下请求:
SELECT device_serial, temp, tstamp, COUNT(*) c FROM up_logs GROUP BY device_serial, temp, tstamp HAVING c > 1
Run Code Online (Sandbox Code Playgroud)
为了避免将来出现这些重复,我想使用SQL请求将当前索引转换为唯一约束:
ALTER TABLE up_logs DROP INDEX UK_UP_LOGS_TSTAMP_DEVICE_SERIAL,
ALTER TABLE up_logs ADD INDEX UK_UP_LOGS_TSTAMP_DEVICE_SERIAL ( `tstamp` , `device_serial` )
Run Code Online (Sandbox Code Playgroud)
但在此之前,我需要清理我的副本!
我的问题是:如何只保留一份重复条目?请记住,我的表包含14M条目,所以如果可能的话我想避免循环.
欢迎任何评论!
我需要从mysql中删除表中的重复记录.所以我有一个表名"employee"字段是empid,empname,empssn
为了获得重复记录我写了一个查询
SELECT COUNT(empssn), empssn
FROM employee
GROUP BY empssn
HAVING COUNT(empssn)>1
Run Code Online (Sandbox Code Playgroud)
现在我想删除重复的记录.因为我有书面查询是.
DELETE FROM employee
WHERE (empid, empssn) NOT IN (SELECT MIN(empid), empssn
FROM employee
GROUP BY empssn);
Run Code Online (Sandbox Code Playgroud)
你可以假设表中的记录是
EmpId EmpName EmpSSN
-------------------------------
1 Jack 555-55-5555
2 Joe 555-56-5555
3 Fred 555-57-5555
4 Mike 555-58-5555
5 Cathy 555-59-5555
6 Lisa 555-70-5555
7 Jack 555-55-5555
8 Mike 555-58-5555
9 Cathy 555-59-5555
10 Lisa 555-70-5555
11 Lisa 555-70-5555
Run Code Online (Sandbox Code Playgroud)
但我有一个mysql错误是
您不能在FROM子句中为更新指定目标表'employee'
可能重复:
仅使用MySQL查询删除重复项?
我有一个不同页面的表,但其中一些是重复的.确定重复项的唯一方法是按标题.我运行下面的代码,它完美地运行:
<?php
mysql_connect("localhost", "root", "root") or die(mysql_error());
mysql_select_db("old") or die(mysql_error());
$result = mysql_query("SELECT pagetitle, COUNT( * ) c
FROM cms_site_content
GROUP BY pagetitle
HAVING c >1") or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo $row['id'].'-'.$row['pagetitle'].'<br />';
}
?>
Run Code Online (Sandbox Code Playgroud)
我的问题是:我如何删除重复项并只保留一个条目.例如,如果我有一篇名为"Duplicate Article"的文章,结果是
重复文章:3
我只想保留一个.