sql >> Database >  >> RDS >> Mysql

Waarom is de gegeven syntaxis geldig in mysql?

Het is het alternatief UNION syntaxis met een laatste ORDER BY .

Zo ziet zo'n verbintenis tussen twee selecteurs eruit:

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

En dit is wat zo'n verbintenis tussen één selecteren ziet eruit als:

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

Helemaal niet gerelateerd aan subquery's.

Dit is niet gedocumenteerd in MySQL, maar blijkt duidelijk uit de grammatica :

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; }
        ;


  1. Een tijdelijke oplossing voor DATEDIFF() SET DATEFIRST negeren in SQL Server (T-SQL-voorbeeld)

  2. XMLAGG met RTRIM-probleem

  3. SCD-type 4

  4. Hoe kan ik meer dan 1 record per dag selecteren?