Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何删除没有主键的重复行_Sql_Delete Row - Fatal编程技术网

Sql 如何删除没有主键的重复行

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_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

如果没有主键,则需要提供其他条件以确保删除相应的记录

可以使用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