由于我的javascript点击处理存在错误,多个Location对象会发布到发送到服务器的JSON数组中。我想我知道如何解决这个bug,但我也想实现服务器端数据库重复擦除功能。但是,我不确定如何编写此查询。
唯一受影响的表格为
+----+------------+--------+
| ID | locationID | linkID |
+----+------------+--------+
| 64 | 13 | 14 |
| 65 | 14 | 13 |
| 66 | 14 | 15 |
| 67 | 15 | 14 |
| 68 | 15 | 16 |
| 69 | 16 | 17 |
| 70 | 16 | 14 |
| 71 | 17 | 16 |
| 72 | 17 | 16 |
| 73 | 17 | 16 |
| 74 | 17 | 16 |
| 75 | 17 | 16 |
| 76 | 17 | 16 |
| 77 | 17 | 16 |
+----+------------+--------+
如您所见,我有多对(17, 16)
,而14
有两对(14, 13)
和(14, 15)
。如何删除任何重复条目的所有记录?
答案 0 :(得分:4)
不要实现post factum校正逻辑,在需要唯一的字段上放置一个唯一索引,这样数据库就会在为时已晚之前停止重复插入。
如果您使用的是MySQL 5.1或更高版本,则可以删除欺骗并在1个命令中创建唯一索引:
ALTER IGNORE TABLE 'YOURTABLE'
ADD UNIQUE INDEX somefancynamefortheindex (locationID, linkID)
答案 1 :(得分:3)
您可以创建一个临时表,您可以在其中存储不同的记录,然后截断原始表并从临时表中插入数据。
CREATE TEMPORARY TABLE temp_table (locationId INT,linkID INT)
INSERT INTO temp_table (locationId,linkId) SELECT DISTINCT locationId,linkId FROM table1;
DELETE from table1;
INSERT INTO table1 (locationId,linkId) SELECT * FROM temp_table ;
答案 2 :(得分:1)
delete from tbl
using tbl,tbl t2
where tbl.locationID=t2.locationID
and tbl.linkID=t2.linkID
and tbl.ID>t2.ID
答案 3 :(得分:0)
我假设你不是要清理,而是为了新的检查?如果可能的话,在可能的情况下放置一个唯一的索引,如果你没有控制DB,请执行upsert并检查空值而不是插入。