Ich versuche diese Lösung für meine Daten in der Tabelle anzuwenden in MySQL DB, die Duplikate hat. Und ich bekomme einen solchen Fehler:
%Vor% Habe auch versucht Aliasse zuzuweisen - aber ohne Erfolg.
Welcher Grund dieses Fehlers hier?
Es deutet generell darauf hin, dass SQL-Skript zyklischen Prozess erzeugen kann, aber hier sehe ich eigentlich keine relevanten - Es ist offensichtlich, dass zwei Selektionen für DELETE
und für SELECT
getrennt ist - Engine muss SELECT
zuerst einmal und dann tun Verwenden Sie es in WHERE
Bedingungen für DELETE
.
Also - warum dieser Fehler passiert und wie kann ich meinen Tisch tatsächlich deduplizieren? =)
Ihre Abfrage ist korrekt und würde auf anderen DBMS funktionieren, aber MySQL erlaubt Ihnen nicht, aus einer Tabelle zu aktualisieren oder zu löschen und aus derselben Tabelle in einer Unterabfrage auszuwählen. Es ist in den offiziellen DELETE -Dokumenten dokumentiert.
Es könnte in zukünftigen Versionen behoben sein, aber momentan wird Ihre Abfrage nicht unterstützt.
Eine einfache Lösung wäre, Ihre Unterabfrage in eine Unterabfrage zu stellen, wie in echo_Me Antwort:
%Vor%Dadurch wird MySQL gezwungen, eine temporäre Tabelle mit den Ergebnissen Ihrer Unterabfrage zu erstellen, und da Sie nicht aus derselben Tabelle, sondern aus einer temporären Tabelle auswählen, wird diese Abfrage problemlos ausgeführt. Die Leistung ist jedoch möglicherweise schlecht.
Normalerweise werden Sie den Fehler # 1093 durch Joins beseitigen. Dies ist Ihre Abfrage in Join-Form:
%Vor%oder Sie können diese einfachere Version verwenden, die die schnellste sein sollte:
%Vor%Geige ist hier .
Aus dem Handbuch :
"Derzeit können Sie nicht aus einer Tabelle löschen und aus derselben Tabelle in einer Unterabfrage auswählen."
Verwenden Sie eine geeignete Datenbank-Engine, oder führen Sie die Abfragen separat aus. (Die ID wird programmatisch zwischengespeichert.)
Wenn Sie Datensätze aus einer Tabelle löschen möchten, verwenden Sie DELETE FROM tablename
. Sie können hier keine Spalte angeben. Wenn Sie die Daten aus einer Spalte entfernen möchten, verwenden Sie die Anweisung UPDATE, um den Wert der Spalte auf leer oder NULL zu setzen.
das sintax von löschen
erfordert nicht den Namen von Spalten
weil mysql alle Daten löscht, die eine Bedingung erfüllen