我有一个如下所示的表格结构:
table(A, B)
他们都是主键,需要连接另一张表中的两个条目(即它们代表用户之间的友谊关系)。
我需要检查表格,如果(A,B)存在,则删除(B,A)(或反之亦然)。
由于数据库非常庞大,我无法每次手动为每个条目执行此操作。
当然,我编写了填充数据库的脚本以检查此情况并避免出现问题,但我们在8台不同的PC上使用了该脚本,因此可能存在“反向重复”问题。
我有一个如下所示的表格结构:
table(A, B)
relationship:
id auto_increment
related:
r_id foreign key references relationship.id
u_id foreign key references user.id
primary key (r_id, u_id)
但是要清理现有的数据...一个明显的方法是...
DELETE FROM yourtable d
WHERE A>B AND EXISTS (
SELECT 1
FROM yourtable r
WHERE r.A=d.B
AND r.B =d.A
)
SELECT d.A,d.B
INTO dups
FROM yourtable d, yourtable r
WHERE d.A>d.B
AND r.A=d.B
AND r.B =d.A;
那么....
DELETE FROM yourtable
WHERE EXISTS (
SELECT 1 FROM dups
WHERE dups.A=yourtable.A
AND dups.B=yourtable.B
)
不确定推送的谓词是否仍会引起问题,因此如果这样不行....
DELETE FROM yourtable
WHERE CONCAT(A, '/', B) IN (
SELECT CONCAT(A, '/' B) FROM dups
)