基于其他列值删除sql中的重复项

基于其他列值删除sql中的重复项,sql,sql-server,tsql,sql-delete,Sql,Sql Server,Tsql,Sql Delete,我想根据以下条件删除重复项 我的表包含交叉关系之类的数据。第1列值存在于第2列中,反之亦然 样本表 id id1 ------------- 1 2 2 1 3 4 4 3 5 6 6 5 7 8 8 7 我想删除前两行中的1行,第三行和第四行中的相同,第五行和第六行中的相同,依此类推 有人能帮忙吗?根据您要保留的行的不同,它会有

我想根据以下条件删除重复项

我的表包含交叉关系之类的数据。第1列值存在于第2列中,反之亦然

样本表

id     id1
-------------    
1      2     
2      1     
3      4     
4      3     
5      6     
6      5     
7      8     
8      7
我想删除前两行中的1行,第三行和第四行中的相同,第五行和第六行中的相同,依此类推


有人能帮忙吗?

根据您要保留的行的不同,它会有所不同,但是如果您确实有简单的副本,如示例中所示,并且每一对都以两种顺序存在,则应该这样做:

DELETE FROM MyTable
WHERE ID > ID1

它会根据您想要保留的行而有所不同,但如果您确实有简单的重复项,如示例中所示,并且每对都以两种顺序存在,则应该这样做:

DELETE FROM MyTable
WHERE ID > ID1

这样,您将从每组2行中仅删除第二行:

CREATE TABLE [LIST_ID](
    [ID] [NUMERIC](4, 0) NOT NULL,
    [ID_1] [NUMERIC](4, 0) NOT NULL
);


INSERT INTO LIST_ID (ID, ID_1)
VALUES
(1, 2),
(2, 1),
(3, 4),
(4, 3),
(5, 6),
(6, 5);

WITH First_Row AS
(
SELECT ROW_NUMBER() OVER (ORDER BY ID ASC) AS Row_Number, *
FROM LIST_ID
)
DELETE FROM First_Row WHERE Row_Number % 2 ='0';

SELECT * FROM LIST_ID;

这样,您将从每组2行中仅删除第二行:

CREATE TABLE [LIST_ID](
    [ID] [NUMERIC](4, 0) NOT NULL,
    [ID_1] [NUMERIC](4, 0) NOT NULL
);


INSERT INTO LIST_ID (ID, ID_1)
VALUES
(1, 2),
(2, 1),
(3, 4),
(4, 3),
(5, 6),
(6, 5);

WITH First_Row AS
(
SELECT ROW_NUMBER() OVER (ORDER BY ID ASC) AS Row_Number, *
FROM LIST_ID
)
DELETE FROM First_Row WHERE Row_Number % 2 ='0';

SELECT * FROM LIST_ID;
这个怎么样:

DELETE
  FROM  myTable
 WHERE  id  IN (
                SELECT  CASE WHEN id < id1 THEN id ELSE id1 END
                  FROM  myTable
               )
其中myTable是包含数据的示例表。

这是什么:

DELETE
  FROM  myTable
 WHERE  id  IN (
                SELECT  CASE WHEN id < id1 THEN id ELSE id1 END
                  FROM  myTable
               )

其中myTable是包含数据的示例表。

所以我能理解的是,您希望从id=id1的表中删除行

delete from TableA as a
where exists(select 1 from TableA as b where a.id = b.id1)

所以我能理解的是,您想要从id=id1的表中删除行

delete from TableA as a
where exists(select 1 from TableA as b where a.id = b.id1)