从表mysql中删除所有b,a

时间:2013-02-24 09:28:02

标签: mysql sql

我有一个包含3个字段的表格,如下所示

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

找出匹配的相应ID。但是,在此之后无法继续。请帮助。

3 个答案:

答案 0 :(得分:3)

如果要永久删除那些重复的记录,请使用DELETE语句,该语句使用MySQL的LEASTGREATEST内置函数。

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
        )

答案 1 :(得分: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

答案 2 :(得分:0)

如果您只想显示“半”结果:

SELECT *
FROM val
WHERE a <= b ;

如果你想删除另一半:

DELETE *
FROM val
WHERE a > b ;