我有一个表,其中既有 ChildID 又有 ParentID。由于数据的编制方式,在某些情况下这些值会颠倒。因此,我编写了一个简单的内部联接,其中两个值都被反转,并尝试删除第一个表值。我似乎记得这之前工作得很好,除了现在这个del
Delete S1 from TableA S1
Inner Join TableA S2
On S1.ChildID=S2.ParentID
and S1.ParentID=S2.ChildID
https://sqlfiddle.com/mysql/online-compiler?id=bc5a98e7-efd9-443c-87d9-3eba3304da82
这取决于您要保留哪一列。
从这些数据中无法判断。
但我发现您需要区分 ID 之间的哪个,从而确定将删除哪一列
-- INIT database
CREATE TABLE TableA (
ID INT,
ChildID INT,
ParentID INT
);
INSERT INTO TableA (ID,ChildID,ParentID) VALUES (1,89,891);
INSERT INTO TableA (ID,ChildID,ParentID) VALUES (2,99,991);
INSERT INTO TableA (ID,ChildID,ParentID) VALUES (3,991,99);
-- QUERY database
Delete S1 from TableA S1
Inner Join TableA S2
On S1.ChildID=S2.ParentID
and S1.ParentID=S2.ChildID
AND S1.ID < S2.ID;
Select * from TableA;
身份证号码 | 儿童ID | 家长ID |
---|---|---|
1 | 89 | 891 |
3 | 991 | 99 |
INSERT INTO TableA (ID,ChildID,ParentID) VALUES (2,99,991);
Delete S1 from TableA S1
Inner Join TableA S2
On S1.ChildID=S2.ParentID
and S1.ParentID=S2.ChildID
AND S1.ID > S2.ID;
Select * from TableA;
身份证 | 儿童ID | 家长ID |
---|---|---|
1 | 89 | 891 |
2 | 99 | 991 |