2010-11-04 55 views
1

我有一个三列,obj1,obj2(两个varchars)和对象之间的距离的表。不幸的是,构建数据的方式,我有两个条目的数量,例如,从Mysql数据库删除重复的条目

obj1  obj2  distance 
c1  c2   10.5 
c2  c1   10.5 

想我要的是能够删除列出的条目之一。我想过并尝试使用Exists子句,但没有运气。我想知道这是否需要存储过程?

任何帮助将感激地收到! 吉姆

回答

-1

如果你能保证每行都有一个“重复”与OBJ1和扭转obj2的值,那么你可以通过做

DELETE FROM dist WHERE obj1 > obj2 

其中dist是的名称中删除一个这样的行对每个复制你的桌子。

如果你的表中有行,其中obj1等于obj2,那么你可以做的(OBJ1,OBJ2)唯一索引:

ALTER IGNORE TABLE dist ADD UNIQUE INDEX dist_index (obj1,obj2) 

上面的命令将每当唯一索引约束是下降,从表中的行不满意。 (obj1等于obj2的第一行,因为唯一索引约束仍然被满足,所以行将被保留,obj1等于obj2的第二行将被丢弃,因为第二行与唯一性约束相矛盾。)

您可以选择保留唯一索引,或者,如果你想删除它,该命令将是:

ALTER TABLE dist DROP INDEX dist_index 
+0

非常感谢! – James 2010-11-06 14:48:22

1
mysql> create table doubles(a int,b int,c int); 
Query OK, 0 rows affected (0.11 sec) 

mysql> insert into doubles values (1,2,10),(2,1,10),(1,3,12),(3,1,12),(2,3,13); 
Query OK, 5 rows affected (0.00 sec) 
Records: 5 Duplicates: 0 Warnings: 0 

mysql> select * from doubles; 
+------+------+------+ 
| a | b | c | 
+------+------+------+ 
| 1 | 2 | 10 | 
| 2 | 1 | 10 | 
| 1 | 3 | 12 | 
| 3 | 1 | 12 | 
| 2 | 3 | 13 | 
+------+------+------+ 
5 rows in set (0.00 sec) 

mysql> DELETE a FROM doubles a JOIN doubles b ON a.a = b.b AND a.b = b.a AND a.a > b.a; 
Query OK, 2 rows affected (0.03 sec) 

mysql> select * from doubles; 
+------+------+------+ 
| a | b | c | 
+------+------+------+ 
| 1 | 2 | 10 | 
| 1 | 3 | 12 | 
| 2 | 3 | 13 | 
+------+------+------+ 
3 rows in set (0.00 sec) 

最后条款(a.a > b.a)同样可以a.a < b.a,我们只需要决定哪一个双打应该去。

+0

有问题做这个工作,我试图玩这个,最终得到 – James 2010-11-06 14:42:56

+0

对不起意外按下return.ysql>删除从spectra spectramatches_2作为sa加入spectramatches_2作为sb开sa.spectra1 = sb.spectra2 AND sa.spectra2 = sb .spectra1 AND sa.spectra1> sb.spectra1; 错误1064(42000):您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行的'as sa JOIN spectramatches_2 s'ON sa.spectra1 = sb.spectra2 AND sa.spectra2'附近使用正确的语法 – James 2010-11-06 14:43:35

+0

表定义为mysql> describe spectramatches_2 - >; + --------------- + ------------- + ------ + ----- + ----- ---- + ------- + |字段|类型|空| Key |默认|额外| + --------------- + ------------- + ------ + ----- + ----- ---- + ------- + | core1 | varchar(10)|是| | NULL | | | distance_c1s1 |双|是| | NULL | | | spectra1 | varchar(10)|是| | NULL | | | distance_s1s2 |双|是| | NULL | | | spectra2 | varchar(10)|是| | NULL | | | distance_c2s2 | double – James 2010-11-06 14:44:48

相关问题