使用内部联接从同一个表中删除似乎失败(两条记录都被删除)

问题描述 投票:0回答:1

我有一个表,其中既有 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

mysql inner-join delete-row
1个回答
0
投票

这取决于您要保留哪一列。

从这些数据中无法判断。

但我发现您需要区分 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

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.