删除所有B,A从表的MySQL
问题描述:
我有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哪个比赛。但是,在这之后无法继续。请帮助。
答
如果你想永久删除这些重复记录,这里是它使用MySQL的LEAST
和GREATEST
内置功能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
)
答
你可以这样做来选择你想要的输出。
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
答
如果你想只显示 “半” 结果:
SELECT *
FROM val
WHERE a <= b ;
,如果你想删除的另一半:
DELETE *
FROM val
WHERE a > b ;
一个简单的版本:HTTP:// www.sqlfiddle.com/#!2/59cfa/5 – 2013-02-24 16:19:43