Sql 如何删除没有主键的重复行
下表没有主键,我想从下表中删除重复的行。重复行中唯一的区别因素是atom_id2。如何删除重复的行。请给出你的建议Sql 如何删除没有主键的重复行,sql,delete-row,Sql,Delete Row,下表没有主键,我想从下表中删除重复的行。重复行中唯一的区别因素是atom_id2。如何删除重复的行。请给出你的建议 atom_id1, atom_id2, atom_ty1, atom_ty2, lennard_jones_acoef, lennard_jones_bcoef --------------------------------------------------------------------------------- 1, 1, N3,
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
如果没有主键,则需要提供其他条件以确保删除相应的记录 可以使用WHERE子句执行此操作,例如:
DELETE FROM your_table WHERE atom_id1 = 1 AND atom_id2 = 4;
注意:这假设除了您提供的记录之外,没有其他记录。我强烈建议将此作为“选择优先”运行
你也应该考虑创建主键。看起来atom_id2可能是一个很好的候选者。
使用主键是最好的方法。在您的情况下,在where条件中至少使用两个字段,包括atom_id2,这样就不会选择重复项。您必须首先通过创建一个适当的SELECT语句来确认这一点,然后将此语句转换为DELETE语句,这对您来说比较容易。如果在删除现有表中的重复行时遇到困难,您可以创建新表并插入现有表中的不同值。我希望它能帮助您创建PK,查找重复项,删除它们。您使用的是什么DBMS?@zerkms:如果表中已经包含标识列,该怎么办?在这种情况下,无法创建PK。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