Ich habe eine MySQL-Datenbanktabelle mit zwei Spalten, die mich interessieren. Individuell können sie jeweils Duplikate haben, aber sie sollten niemals ein Duplikat von BEIDEN mit demselben Wert haben.
stone_id
kann Duplikate haben, solange für jeden upsharge
Titel anders und umgekehrt. Aber sagen Sie zum Beispiel stone_id
= 412 und upcharge_title
= "Saphir", dass die Kombination nur einmal vorkommen sollte.
Das ist in Ordnung:
stone_id = 412 upcharge_title = "sapphire"
stone_id = 412 upcharge_title = "ruby"
Das ist NICHT in Ordnung:
stone_id = 412 upcharge_title = "sapphire"
stone_id = 412 upcharge_title = "sapphire"
Gibt es eine Abfrage, die in beiden Feldern Duplikate findet? Und wenn möglich, gibt es eine Möglichkeit, meine Datenbank so einzustellen, dass dies nicht möglich ist?
Ich verwende MySQL Version 4.1.22
quelle
Ich fand es hilfreich, einen eindeutigen Index mit einem "ALTER IGNORE" hinzuzufügen, der die Duplikate entfernt und eindeutige Datensätze erzwingt, wie Sie es gerne tun würden. Die Syntax wäre also:
Dies fügt effektiv die eindeutige Einschränkung hinzu, was bedeutet, dass Sie niemals doppelte Datensätze haben und der IGNORE die vorhandenen doppelten Datensätze löscht.
Weitere Informationen zu eh ALTER IGNORE finden Sie hier: http://mediakey.dk/~cc/mysql-remove-duplicate-entries/
Update: Ich wurde von @Inquisitive darüber informiert, dass dies in Versionen von MySql> 5.5 fehlschlagen kann:
Update -
ALTER IGNORE
In 5.7 entferntAus den Dokumenten
Einer der MySQL-Entwickler bietet zwei Alternativen :
INSERT IGNORE
.Abhängig von der Größe Ihres Tisches ist dies jedoch möglicherweise nicht praktikabel
quelle
Sie können Duplikate wie dieses finden ..
quelle
So finden Sie die Duplikate:
Um dies in Zukunft zu vermeiden, erstellen Sie einen zusammengesetzten eindeutigen Schlüssel für diese beiden Felder.
quelle
Im Übrigen würde eine zusammengesetzte eindeutige Einschränkung für die Tabelle verhindern, dass dies überhaupt auftritt.
(Dies ist gültiges T-SQL. Ich bin mir bei MySQL nicht sicher.)
quelle
Dieser SO-Beitrag hat mir geholfen, aber ich wollte auch wissen, wie man eine der Zeilen löscht und behält ... hier ist eine PHP-Lösung, um die doppelten Zeilen zu löschen und eine zu behalten (in meinem Fall gab es nur 2 Spalten und sie befindet sich in einer Funktion zum Löschen doppelter Kategoriezuordnungen)
Das (Limit NUM_DUPES - 1) bewahrt die einzelne Zeile ...
Danke an alle
quelle
ALTER IGNORE TABLE table ADD UNIQUE INDEX index_name(stone_id, charge_title)
entfernt doppelte Zeilen und hinterlässt nur ein eindeutiges Paar.