如果有一些空字段,我如何删除SQL数据库中的重复条目: 我有一个表Mesure2包含重复的条目,一些有空字段,我删除了其他重复的条目,如下所示:
INSERT Mesures SELECT distinct * FROM Mesures2;
但仍有重复的空字段条目阻止我创建密钥:
MariaDB [sidonie2]> ALTER TABLE Mesures ADD PRIMARY KEY (`N° Fiche`,Date,Angle,Sépar,`Nb Nuits`,CodeObs,Instrument,dimension,Réf,Nota);
ERROR 1062 (23000): Duplicate entry '2928-1892.93-258.6-03.34-2-JNS---LDS-' for key 'PRIMARY'
MariaDB [sidonie2]> select * from Mesures where `N° Fiche` = 2928 and Date = 1892.93;
+-----------+---------+-------+--------+----------+---------+-----------+------------+------+------+
| N° Fiche | Date | Angle | Sépar | Nb Nuits | CodeObs | dimension | Instrument | Réf | Nota |
+-----------+---------+-------+--------+----------+---------+-----------+-----------+------+------+
| 2928 | 1892.93 | 258.6 | 03.34 | 2 | JNS | NULL | NULL | LDS | |
| 2928 | 1892.93 | 258.6 | 03.34 | 2 | JNS | NULL | NULL | LDS | NULL |
+-----------+---------+-------+--------+----------+---------+-----------+------------+------+------+
如何消除只有Null和空相同字段的重复(这里是Nota字段,但可能是其他任何字段)?
答案 0 :(得分:0)
很奇怪您将整行定义为主键。您是否考虑过自动增量字段?
在任何情况下,如果要删除NULL值,请在插入中执行:
INSERT Mesures(`N° Fiche`, Date, Angle, Sépar, `Nb Nuits`, CodeObs, Instrument, dimension, Réf, Nota)
SELECT distinct `N° Fiche`, Date, Angle, Sépar, `Nb Nuits`, CodeObs, Instrument, dimension, Réf, Nota
FROM Mesures2
WHERE `N° Fiche` IS NOT NULL AND
Date IS NOT NULL AND
Angle IS NOT NULL AND
Sépar IS NOT NULL AND
`Nb Nuits` IS NOT NULL AND
CodeObs IS NOT NULL AND
Instrument IS NOT NULL AND
dimension IS NOT NULL AND
Réf IS NOT NULL AND
Nota IS NOT NULL;
这种方法确实假设表在INSERT
之前是空的。
答案 1 :(得分:0)
这取决于您是否要将空值保留为NULL:
INSERT Mesures (`N° Fiche`,Date,Angle,Sépar,`Nb Nuits`,CodeObs,Instrument,dimension,Réf,Nota)
SELECT DISTINCT
`N° Fiche`,
Date,
Angle,
Sépar,
`Nb Nuits`,
CodeObs,
Instrument,
dimension,
Réf,
nullif(Nota,'')
FROM Mesures2;
或者,如果您希望空值为空字符串:
INSERT Mesures (`N° Fiche`,Date,Angle,Sépar,`Nb Nuits`,CodeObs,Instrument,dimension,Réf,Nota)
SELECT DISTINCT
`N° Fiche`,
Date,
Angle,
Sépar,
`Nb Nuits`,
CodeObs,
Instrument,
dimension,
Réf,
ifnull(Nota,'')
FROM Mesures2;
请注意,nullif()
和ifnull()
是非常不同的功能。
答案 2 :(得分:-1)
alter IGNORE TABLE tablename add UNIQUE index(col_name)