我有一个包含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。但是,在此之后无法继续。请帮助。
答案 0 :(得分:3)
如果要永久删除那些重复的记录,请使用DELETE
语句,该语句使用MySQL的LEAST
和GREATEST
内置函数。
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 ;