Sie können die Zieltabelle 'NAME' für die Aktualisierung in der FROM-Klausel nicht angeben

8

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? =)

    
Gill Bates 19.07.2013, 09:08
quelle

5 Antworten

27

versuchen Sie das kann Ihnen helfen

%Vor%

Lesen Sie mehr

    
echo_Me 19.07.2013, 09:10
quelle
4

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 .

    
fthiella 21.07.2013 16:23
quelle
3

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.)

    
aib 19.07.2013 09:17
quelle
0

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.

    
Biju P 19.07.2013 09:16
quelle
-1

das sintax von löschen

erfordert nicht den Namen von Spalten

weil mysql alle Daten löscht, die eine Bedingung erfüllen

    
bomberdini 19.07.2013 09:18
quelle

Tags und Links