2010-11-04 57 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

相關問題