2012-05-23 7 views
9

Diese Abfrage gibt mir einen Fehler in MySQL 5.1.57, arbeitet in 5.1.53 aber:Unbekannte Tabelle in MULTI DELETE


    DELETE f 
    FROM table1 AS f 
    JOIN table2 AS dsy 
    JOIN table3 AS ds 
    JOIN table4 AS dp 
    JOIN table5 AS dg 
    WHERE 
    dsy.f1 = f.f1 
    AND ds.f2 = f.f2 
    AND dp.f3 = f.f3 
    AND dg.f4 = f.f4 
    AND dsy.school_year = 2011 
    AND ds.id = 29620 
    AND dp.id = 14120 
    AND dg.grade_level = 5; 

Der Fehler ist: Unbekannte Tabelle 'f' in MULTI DELETE

Vielen Dank!

EDIT: Eigentlich funktioniert diese Abfrage, die Sache ist, dass ich den Schemanamen verwendet habe, um meine Tabellen wie schema.table1 zu deklarieren (ich entfernte es, um eine klarere Abfrage hier), mit dem Schemanamen bricht es .. .

+0

Haben Sie versucht, die "f" alias ersetzt auf die erste Zeile mit dem eigentlichen Tabellennamen? Es gibt einen Fehlerbericht dafür. http://bugs.mysql.com/bug.php?id=27525. Fix scheint nur in 5.2 zu sein? – Marvo

+0

Funktioniert nicht für DELETE table1 ..., der Fehler ist derselbe, unbekannte Tabelle 'table1' in MULTI DELETE –

+2

Wenn der Fehler in einer Abfrage mit mehreren Datenbanken auftritt, müssen Sie die Aliase der Datenbank voranstellen Name. zB 'DELETE db1.a FROM db1.table1 ein JOIN db2.table2 b LEFT JOIN ...' – Matthieu

Antwort

9

Diese Abfrage -

DELETE f 
FROM table1 AS f 
JOIN table2 AS dsy 
    ON dsy.f1 = f.f1 
JOIN table3 AS ds 
    ON ds.f2 = f.f2 
JOIN table4 AS dp 
    ON dp.f3 = f.f3 
JOIN table5 AS dg 
    ON dg.f4 = f.f4 
WHERE 
    dsy.school_year = 2011 AND ds.id = 29620 AND dp.id = 14120 AND dg.grade_level = 5; 
+0

Dieser funktioniert, vielen Dank für Ihre Hilfe! Das Seltsame ist, dass ich mich daran erinnere, so etwas vor langer Zeit zu machen und das hat nicht funktioniert, deshalb habe ich alles in die WHERE gestellt ... –

+2

EDIT: eigentlich funktioniert meine ursprüngliche Abfrage, die Sache ist, dass ich den Schemanamen benutzt habe deklariere meine Tabellen wie schema.table1, mit dem Schemanamen, den es bricht ... –

+0

Einschließlich des Schemas war es auch für mich tödlich. Ich musste "USE' myschema' machen; " in derselben Abfrage, damit es funktioniert. –

3

Haben Sie versucht, alle Ihre Tabellenalias zu entfernen? Es gibt eine ähnliche Lösung here vorgeschlagen. So kann die folgende Arbeit:

DELETE table1 
    FROM table1 
    JOIN table2 
    JOIN table3 
    JOIN table4 
    JOIN table5 
    WHERE 
    table2.f1 = table1 .f1 
    AND table3.f2 = table1.f2 
    AND table4.f3 = table1.f3 
    AND table5.f4 = table1.f4 
    AND table2.school_year = 2011 
    AND table3.id = 29620 
    AND table4.id = 14120 
    AND table5.grade_level = 5; 
+2

das war das Problem mit mir. Vielleicht sollten Sie die Antwort ein wenig klarer machen, warum das funktioniert. Die Frage sollte eigenständig ohne eine Verbindung stehen. –

+0

Der Kern der Sache ist, dass Sie Ihren Tabellenalias im oberen DELETE-Teil verwenden sollten, nicht den vollständigen Namen der Tabelle. – Gruber

1

ich denselben Fehler behoben mit Schema verwenden, nachdem löschen:

DELETE **`schemaX`.f** 
    FROM `schemaX`.table1 AS f 
    JOIN table2 AS dsy 
    JOIN table3 AS ds 
    JOIN table4 AS dp 
    JOIN table5 AS dg 
    WHERE 
    dsy.f1 = f.f1 
    AND ds.f2 = f.f2 
    AND dp.f3 = f.f3 
    AND dg.f4 = f.f4 
    AND dsy.school_year = 2011 
    AND ds.id = 29620 
    AND dp.id = 14120 
    AND dg.grade_level = 5; 
Verwandte Themen