2011-01-05 8 views
5

Ich versuche, alle Datensätze zu löschen, die nicht die neueste Version unter ihrem Namen sind, aber anscheinend können Sie nicht auf eine Tabelle zugreifen, die Sie in derselben Abfrage ändern.Get-around in einer DELETE-Abfrage selbst

habe ich versucht, diese aber es funktioniert nicht für die oben genannten Gründe:

DELETE FROM table 
WHERE CONCAT(name, version) NOT IN (
SELECT CONCAT(name, MAX(version)) 
FROM table 
GROUP name 
) 

Wie kann ich dieses Problem umgehen?

Prost

Antwort

7

Wrap the inner reference in a derived table.

DELETE FROM table 
WHERE Concat(name, version) NOT IN (SELECT nv 
            FROM (SELECT Concat(name, Max(version)) 
                AS nv 
              FROM table 
              GROUP BY name) AS derived) 
+1

Danke, hatte ich diesen Link gesehen und versucht, diese Methode früher, aber ich muss irgendwo ein verlegtes Klammer verlassen haben. – DonutReply

+0

gerade bemerkt, dass und bearbeitet – DonutReply

1
delete t1 
from table_name1 t1, table_name1 t2 
where t1.version < t2.version 
and t1.name = t2.name; 

// Erstellen des Alias ​​ist die Notwendigkeit, hier

Verwandte Themen