Ich versuche doppelte Zeilen zu finden, die auf gemischten Spalten basieren. Dies ist ein Beispiel für das, was ich habe:
%Vor%Nun, wenn ich diese Abfrage ausführen:
%Vor%Ich würde erwarten, beide IDs zurückzubekommen. (1 und 2), aber ich bekomme immer nur die eine Zeile zurück.
Meine Gedanken wären, dass es jede Reihe vergleichen sollte, aber ich denke, das ist nicht richtig? Um das zu beheben, hatte ich meine Abfrage folgendermaßen geändert:
%Vor%Das gibt mir beide Zeilen, aber die Leistung verschlechtert sich extrem schnell basierend auf der Anzahl der Zeilen.
Die letzte Lösung für Leistung und Ergebnisse war die Verwendung einer Verbindung:
%Vor%Aber insgesamt fehlt mir offensichtlich das Verständnis, warum das nicht funktioniert, was bedeutet, dass ich wahrscheinlich etwas falsch mache. Könnte mir jemand in die richtige Richtung zeigen?
Nicht an einer Ungleichheit teilnehmen; Es scheint, dass die JOIN- und WHERE-Bedingungen invertiert sind.
%Vor%Sollte gut funktionieren.
Sie erhalten nur beide IDs zurück, wenn Sie sie auswählen:
%Vor%Der Grund dafür, dass nur eine Zeile erhalten wird, ist, dass nur eine Zeile (nämlich Zeile # 2) eine TEST1 hat, die der TEST2 einer anderen Zeile entspricht.
Ich sehe aus, als würdest du sehr schnell auf ein Cartiesian Join hinarbeiten. Normalerweise müssen Sie, wenn Sie nach Duplikaten suchen, Folgendes ausführen:
%Vor%Wenn Sie die Spalten mischen müssen, dann mischen Sie die benötigten Bedingungen, aber tun Sie etwas wie:
%Vor%Damit vergleichen Sie in jedem Join die Rechte mit der linken und der rechten mit der rechten Seite, wodurch die WHERE ganz überflüssig wird.
Dieser Abfragetyp wächst jedoch exponentiell in der Ausführungszeit für jede in die Tabelle eingefügte Zeile, da Sie jede Zeile mit jeder Zeile vergleichen.
Dies kann ohne innere Verbindungen geschehen, wenn ich mich nicht irre. Dies ist das erste Mal, dass ich eine Frage von MySQL beantworte, aber ich beantworte nur, um hier auf StackOverflow mehr Punkte zu bekommen. Das Komma ist sehr wichtig, damit sich MySQL nicht beschweren kann.
%Vor%