2013-02-24 6 views
2

У меня есть таблица с 3-х полей, как показано нижеудаление всех Ь, а из таблицы MySQL

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

(а, б) и (Ь, а) оба существуют в этой таблице (а = 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 

и выяснили, соответствующие идентификаторы, совпадающие. Но, не в состоянии продолжить после этого. Помощь Pls.

ответ

3

Если вы хотите навсегда удалить эти дубликаты записи, вот DELETE заявление, которое использует LEAST и GREATEST встроенные функции MySQL в.

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 –

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 ; 
Смежные вопросы