2014-03-05 64 views
0

消除重複值選擇所有重複記錄我的表名圖MYSQL由另一列

欄目有:wwid_a,wwid_b,活躍,DATE_ADDED

值是

 
+--------+--------+--------+---------------------+ 
| wwid_a | wwid_b | active |  date_added  | 
+--------+--------+--------+---------------------+ 
| 1943 | 402158 |  1 | 2014-03-05 09:08:51 | 
| 1943 | 402209 |  1 | 2014-03-05 09:08:52 | 
| 1943 | 402464 |  1 | 2014-03-05 09:08:52 | 
| 402158 | 1943 |  1 | 2014-03-05 09:08:5 | 
| 402209 | 1943 |  1 | 2014-03-05 09:08:59 | 
| 402464 | 1943 |  1 | 2014-03-05 09:08:58 | 
+--------+--------+--------+---------------------+ 

基本上每個條目具有由wwid_a和wwid_b互換列的重複記錄。

我想選擇查詢,這將使每個唯一的記錄通過交替wwid_a和wwid_b消除重複值

 
+--------+--------+--------+---------------------+ 
| wwid_a | wwid_b | active |  date_added  | 
+--------+--------+--------+---------------------+ 
| 1943 | 402158 |  1 | 2014-03-05 09:08:51 | 
| 1943 | 402209 |  1 | 2014-03-05 09:08:52 | 
| 1943 | 402464 |  1 | 2014-03-05 09:08:52 | 
+--------+--------+--------+---------------------+ 
+0

該表確實具有以下數據記錄 – kayra

回答

2

事實上,如果一切都是相同的,那麼這可能是最有效的地清除它們:如果您擔心

select g.* 
from graph g 
where g.wwid_a < g.wwid_b; 

這可能不是總是是真的,那麼你有幾個選擇。該not exists邏輯可能是最好的:

select g.* 
from graph g 
where g.wwid_a < g.wwid_b or 
     not exists (select 1 
        from graph g2 
        where g2.wwid_a = g.wwid_b and 
         g2.wwid_b = g.wwid_a 
       ); 

也就是說,保持連續,如果第一個記錄是小於第二個。或者,如果匹配的小於記錄不存在,則保留它。

這對於在graph(wwid_a, wwid_b)上索引較大的數據效果最好。

+0

@Alnitak。 。 。 OP不僅說這是真的,但我甚至在第一句中重複了這種情況。 –

+0

表格確實有如下數據+ -------- + -------- + -------- + -------------- ------- + | wwid_a | wwid_b |活動| date_added | + -------- + -------- + -------- + --------------------- + | 1943 | alvarar3 | 1 | 2014-03-05 09:08:51 | | alvarar3 | 1943 | 1 | 2014-03-05 09:08:52 | + -------- + -------- + -------- + -------------------- - + – kayra

+0

它的工作原理...謝謝 – kayra