2013-02-24 106 views
2

我有3個字段的表如下刪除所有B,A從表的MySQL

id a b 
1 1 2 
2 1 3 
3 2 1 
4 2 3 
5 3 1 
6 3 2 

(A,B)和(B,A)在此表中(A = 1和B兩者存在= 2和a = 2和b = 1)。我需要從上表中刪除所有(b,a)。

Output: 

id a b 
1 1 2 
2 1 3 
4 2 3 

我嘗試了自加入這樣

select v1.id, v2.id from val v1,val v2 where v1.a=v2.b and v1.b=v2.a 

,並發現了相應的IDS哪個比賽。但是,在這之後無法繼續。請幫助。

回答

3

如果你想永久刪除這些重複記錄,這裏是它使用MySQL的LEASTGREATEST內置功能DELETE聲明。

DELETE a 
FROM tableName a 
     LEFT JOIN 
     (
      SELECT LEAST(a, b) aa, 
        GREATEST(a,b) bb, 
        MIN(ID) min_ID 
      FROM tableName 
      GROUP  BY aa, bb 
     ) b ON a.ID = b.min_ID 
WHERE b.min_ID IS NULL 

SELECT聲明

SELECT * 
FROM tableName 
WHERE (LEAST(a, b),GREATEST(a,b), ID) 
     IN 
     (
      SELECT LEAST(a, b) aa, 
        GREATEST(a,b) bb, 
        MIN(ID) min_ID 
      FROM tableName 
      GROUP BY aa, bb 
     ) 
+0

一個簡單的版本:HTTP:// www.sqlfiddle.com/#!2/59cfa/5 – 2013-02-24 16:19:43

0

你可以這樣做來選擇你想要的輸出。

select id, v1.a, v2.a from test v1 left join test v2 on (v1.id = v2.id and v1.a > v2.b) 
where v2.id is null 
0

如果你想只顯示 「半」 結果:

SELECT * 
FROM val 
WHERE a <= b ; 

,如果你想刪除的另一半:

DELETE * 
FROM val 
WHERE a > b ; 
相關問題