在另一个答案中,我发现了一种奇怪的语法:
(SELECT * FROM `articles`
WHERE date >= UNIX_TIMESTAMP(DATE(NOW() - INTERVAL 30 DAY))
ORDER BY `views` DESC
LIMIT 20
) ORDER by `views` ASC
Run Code Online (Sandbox Code Playgroud)
这虽然是由mysql执行的.
为什么我认为它应该失败:
SELECT条款我发现运行意外,并没有解释为什么它的工作原理.
它不符合https://dev.mysql.com/doc/refman/5.5/en/select.html上定义的语法
那么,为什么它有效?任何参考?
它UNION是最终的替代语法ORDER BY.
这是两个选择之间的这种联合看起来像:
(SELECT ...)
UNION
(SELECT ...) ORDER BY ... LIMIT ...
Run Code Online (Sandbox Code Playgroud)
这就是一个选择之间的这种联合看起来像:
(SELECT ...) ORDER BY ... LIMIT ...
Run Code Online (Sandbox Code Playgroud)
根本与子查询无关.
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; }
;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |