mysql: Delete und Tabellenalias
Tobi
- datenbank
Hi,
zu meiner Überraschung stellte ich grad fest, daß mysql einen Tabellenalias nur dann akzeptiert, wenn ich ihn im SELECT-Teil der Query auch angebe:
Auzug aus der Doku:
Hinweis: Wenn Sie einen Alias für eine Tabelle angegeben haben, müssen Sie diesen bei der Referenzierung der Tabelle verwenden:
DELETE t1 FROM test AS t1, test2 WHERE ...
Ist das nur bei MySQL so oder auch in anderen DB-Syszemen, z.b. Postgres?
Tobi
Hallo
zu meiner Überraschung stellte ich grad fest, daß mysql einen Tabellenalias nur dann akzeptiert, wenn ich ihn im SELECT-Teil der Query auch angebe:
Was meint hier "SELECT-Teil"?
„Hinweis: Wenn Sie einen Alias für eine Tabelle angegeben haben, müssen Sie diesen bei der Referenzierung der Tabelle verwenden:
DELETE t1 FROM test AS t1, test2 WHERE ...
“Ist das nur bei MySQL so oder auch in anderen DB-Syszemen, z.b. Postgres?
Mal ein bisschen "Was bin ich?".
Gehe ich recht in der Annahme, dass es dir darum geht, einen im FROM vergebenen Alias in der Abfrage selbst benutzen zu *müssen*? Ich sehe keinen Sinn darin einen vergebenen Alias nicht zu benutzen. Sei's drum, ich kann dir bestätigen, dass auch MS SQL die Verwendung eines vergebenen Alias erzwingt.
„Wenn einer Tabelle ein Alias zugewiesen wird, müssen alle expliziten Verweise auf die Tabelle in der Transact-SQL-Anweisung den Aliasnamen anstelle des Tabellennamens verwenden. Die folgende SELECT-Anweisung erzeugt z. B. einen Syntaxfehler, da sie den Namen der Tabelle verwendet, obwohl ein Alias zugewiesen wurde:
SELECT Sales.Customer.CustomerID, /* Illegal reference to Sales.Customer. */
s.Name
FROM Sales.Customer AS c
JOIN Sales.Store AS s
ON c.CustomerID = s.CustomerID
“
Tschö, Auge
Hi,
Was meint hier "SELECT-Teil"?
SELECT...
FROM...
WHERE...
Gehe ich recht in der Annahme, dass es dir darum geht, einen im FROM vergebenen Alias in der Abfrage selbst benutzen zu *müssen*?
Haargenau.
DELETE FROM table AS t WHERE... ergibt (in mysql) einen Syntaxfehler.
Hingegen
DELETE t FROM table AS t WHERE... ergibt diesen Syntaxfehler nicht.
Auch
DELETE FROM table WHERE... ergibt diesen Syntaxfehler nicht.
Und meine Frage ist:
Ist das mysql-spezifisch oder ist das entsprechend in allen Datenbanksystemen so, ist es also SQL2011 Standard?
Tobi
Tach!
DELETE FROM table AS t WHERE... ergibt (in mysql) einen Syntaxfehler.
Hingegen
DELETE t FROM table AS t WHERE... ergibt diesen Syntaxfehler nicht.
Soweit richtig. Die erste Zeile ist die Single-Table-Syntax, da gibt es keinen Alias. Man kann nur den Tabellennamen angeben. Die zweite Zeile ist die Multiple-Table-Syntax, auch wenn du da nur eine Tabelle verwendest.
Auch
DELETE FROM table WHERE... ergibt diesen Syntaxfehler nicht.
Single-Table-Syntax, passt.
dedlfix.
Hallo
Und meine Frage ist:
Ist das mysql-spezifisch oder ist das entsprechend in allen Datenbanksystemen so, ist es also SQL2011 Standard?
Mit dem Beweis, dass auch MS SQL dieser Regel folgt, habe ich dir doch die Antwort auf Teil eins deiner Frage, nämlich, dass es nicht MySQL-spezifisch ist, geliefert. Ob das explizit von einem SQL-Standard und wenn ja von welchem vorgeschrieben wird, weiß ich nicht. Da die MS-SQL-Doku des Servers 2005, die ich verlinkt und zitiert hatte, dieser Konvention folgt, ist davon auszugehen, dass, wenn es in einem SQL-Standard festgelegt ist, dies ein älterer sein wird, als SQL2011.
Tschö, Auge