Tobi: mysql: Delete und Tabellenalias

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

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

    --
    Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
    Terry Pratchett, "Wachen! Wachen!"
    ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
    Veranstaltungsdatenbank Vdb 0.3
    1. 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

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

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

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
        Veranstaltungsdatenbank Vdb 0.3