1

由于我的 javascript 点击处理中的错误,多个 Location 对象被发布到发送到服务器的 JSON 数组。我想我知道如何修复该错误,但我还想实现服务器端数据库重复擦除功能。但是,我不确定如何编写此查询。

唯一受影响的表布置为

+----+------------+--------+
| 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)and (14, 15)。如何删除任何重复条目的所有记录,但只有一条记录?

4

4 回答 4

4

不要实现事后更正逻辑,在需要唯一的字段上放置唯一索引,这样数据库会在为时已晚之前停止重复插入。

如果您使用的是 MySQL 5.1 或更高版本,则可以删除重复项并在 1 个命令中创建唯一索引:

ALTER IGNORE TABLE 'YOURTABLE' 
ADD UNIQUE INDEX somefancynamefortheindex (locationID, linkID)
于 2012-06-28T16:42:58.007 回答
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 ;
于 2012-06-28T16:50:07.980 回答
1
delete from tbl
using tbl,tbl t2
where tbl.locationID=t2.locationID
  and tbl.linkID=t2.linkID
  and tbl.ID>t2.ID
于 2012-06-28T16:46:02.150 回答
0

我假设您不是为了清理,而是为了新支票?如果可能,请放置一个唯一索引,如果您无法控制数据库,请执行 upsert 并检查空值而不是插入。

于 2012-06-28T16:43:48.197 回答