2

我有一个包含 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 and b=2 and a=2 and 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。但是,在此之后无法继续。请帮忙。

4

3 回答 3

3

如果你想永久删除那些重复的记录,这里是DELETE使用 MySQLLEASTGREATEST内置函数的语句。

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
        )
于 2013-02-24T09:30:59.387 回答
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
于 2013-02-24T09:46:20.137 回答
0

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

SELECT *
FROM val
WHERE a <= b ;

如果你想删除另一半:

DELETE *
FROM val
WHERE a > b ;
于 2013-02-24T09:56:02.833 回答