Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum ist die angegebene Syntax in mysql gültig?

Es ist die Alternative UNION Syntax mit einem abschließenden ORDER BY .

So sieht eine solche Union zwischen zwei Selects aus:

(SELECT ...)
UNION
(SELECT ...) ORDER BY ... LIMIT ...

Und das ist es, was eine solche Vereinigung zwischen eins ausmacht select sieht so aus:

(SELECT ...) ORDER BY ... LIMIT ...

Überhaupt nicht mit Unterabfragen verbunden.

Dies ist in MySQL nicht dokumentiert, ist aber offensichtlich aus the Grammatik :

top_level_select_init:
        SELECT_SYM
        {
            Lex->sql_command= SQLCOM_SELECT;
        }
        select_init2
        | '(' select_paren ')' union_opt
        ;


/* Need select_init2 for subselects. */
union_select_init:
        SELECT_SYM select_init2
        | '(' select_paren ')' union_opt
        ;

...

union_opt:
        /* Empty */ { $$= 0; }
        | union_list { $$= 1; }
        | union_order_or_limit { $$= 1; }
        ;