2016-12-22 6 views
0

いくつかのNULLフィールドがある場合、SQLデータベースで重複エントリを削除するにはどうすればいいですか? 重複したエントリを含むテーブルMesure2があります。このようなエントリ:nullフィールドでSQLデータベースの重複エントリを削除する

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 fiです誰でも構わないでしょう)?

答えて

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前に空であることを前提としていないが。

+0

プライマリキーについては、テーブルは私と私はこれを変更しようとしていませんでした私はそれを行う場合、私はnullフィールドを持っている行だけを得るだろうと仮定していない限り、彼らは空のフィールドと重複する1つまたは複数のnullフィールドを持つことによって異なります。 –

+0

いいえ、それは私が望むものではありません。このクエリはNULLフィールドを持たない個別のデータを選択して挿入しますが、 、 良くない。 –

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()は非常に異なる機能していること。

+0

ありがとう、私はフィールドにifnull()(またはnullif)を使用します。 –

関連する問題