Ich habe eine Tabelle mit 6 Spalten:
id
name
type_id
code
lat
long
Die ersten drei sind erforderlich. ID
ist der private Schlüssel, der automatisch mit einer Sequenz eingefügt wird.
Ich habe einige Zeilen, die Duplikate sind, wie BEIDE name
und type_id
gleich sind, aber ich möchte alle Daten für die Duplikate sehen. Ich kann die Betrogenen einfach genug finden:
, aber tatsächlich alle Informationen zu sehen verwirren mich. Ich weiß, das sollte einfach sein, aber ich stoße hier auf eine Wand.
Sie können die Abfrage GROUP BY
/ HAVING
immer in einer IN-Klausel verwenden. Dies funktioniert und ist relativ einfach, aber es ist möglicherweise nicht besonders effizient, wenn die Anzahl der doppelten Zeilen relativ groß ist.
Im Allgemeinen wäre es effizienter, analytische Funktionen zu verwenden, um zu vermeiden, dass der Tisch ein zweites Mal getroffen wird.
%Vor% Je nachdem, was Sie mit den Daten tun möchten und wie viele Duplikate einer bestimmten Zeile möglicherweise vorhanden sind, möchten Sie möglicherweise auch table1
mit sich selbst verknüpfen, um die Daten in einer einzelnen Zeile abzurufen.
Sie können einen Self-Join in der Tabelle ausführen, um alle Duplikatpaare zu finden:
%Vor% Um sicherzustellen, dass eine Zeile nicht mit sich übereinstimmt und jedes Paar nur einmal ausgegeben wird, habe ich a.ROWID > b.ROWID
hinzugefügt, was für Oracle funktioniert. Sie benötigen einen anderen Weg, um sie auseinander zu halten, wenn Sie eine andere Datenbank verwenden.
Das Doubles findet immer noch nicht, wenn eines der verglichenen Felder einen NULL-Wert hat. Um diese zu erhalten, verwende ich nvl, um NULLs in den verglichenen Feldern mit einem Wert zu verknüpfen, von dem ich weiß, dass er in dieser Tabelle / diesem Feld nicht vorkommen kann.
Tags und Links oracle select duplicates