如何在没有主键的情况下删除重复行

3
以下表格没有主键,我想从以下表格中删除重复的行。在重复的行中唯一不同的因素是atom_id2。如何删除该重复行?请给出您的建议。
atom_id1, atom_id2, atom_ty1, atom_ty2, lennard_jones_acoef, lennard_jones_bcoef 
---------------------------------------------------------------------------------
1,        1,        N3,       N3,       9.44293233E+05,      8.01323529E+02
1,        2,        N3,       H,        2.12601181E+03,      2.09604198E+01
1,        3,        N3,       H,        2.12601181E+03,      2.09604198E+01
1,        4,        N3,       H,        2.12601181E+03,      2.09604198E+01  <-Duplicate Row
1,        5,        N3,       CX,       9.95480466E+05,      7.36907417E+02
1,        6,        N3,       HP,       2.01791425E+04,      6.45756063E+01
1,        7,        N3,       CT,       9.95480466E+05,      7.36907417E+02
1,        8,        N3,       HC,       8.96776989E+04,      1.36131731E+02
1,        9,        N3,       HC,       8.96776989E+04,      1.36131731E+02 <---- Duplicate Row
1,        10,       N3,       C,        8.82619071E+05,      6.53361429E+02
1,        11,       N3,       O2,       6.06829342E+05,      6.77220874E+02

创建主键,查找重复项并删除。 - zerkms
3
您正在使用哪种数据库管理系统(DBMS)? - Vikdor
@zerkms:如果表已经包含IDENTITY列,那怎么办?在这种情况下,无法创建PK。 - Muflix
4个回答

2
没有主键,你需要提供额外的条件来确保你删除了正确的记录。
你可以使用WHERE子句来实现,例如:
DELETE FROM your_table WHERE atom_id1 = 1 AND atom_id2 = 4;

注意: 这里假设除了你提供的记录以外,没有其他记录。我强烈建议先运行 SELECT 命令。

你还应该考虑创建一个主键。看起来 atom_id2 可能是一个不错的选择。


1
First you get distinct row insert temp.. table then delete current table and import row from temp.. table.

insert into temp_table(column1,column2,..) 
select distinct column1,column2,... from table2

delete from table2

insert into table2(column1,column2,..) 
select column1,column2,... from temp_table

0

使用主键是最好的方法。在您的情况下,至少在where条件中使用两个字段,包括atom_id2,以便不会选择重复项。首先通过创建适当的SELECT语句来确认这一点,然后将此语句转换为DELETE,这将更容易。


0
如果您在删除现有表中的重复行时遇到困难,您可以创建新表并从现有表中插入不同的值。希望能对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接