在另一个答案中,我发现了一个奇怪的语法:
(SELECT * FROM `articles`
WHERE date >= UNIX_TIMESTAMP(DATE(NOW() - INTERVAL 30 DAY))
ORDER BY `views` DESC
LIMIT 20
) ORDER by `views` ASC
这是由mysql很好执行的。
为什么我认为它应该失败:
SELECT
子句我发现运行起来很意外,也没有解释为什么运行的原因。
它不符合https://dev.mysql.com/doc/refman/5.5/en/select.html上定义的语法
那么,为什么有效呢?有参考吗?
这是UNION
带有final的替代语法ORDER BY
。
这是两个选择之间的这种联合看起来像:
(SELECT ...)
UNION
(SELECT ...) ORDER BY ... LIMIT ...
这就是 一个 选择之间的这种联合看起来像:
(SELECT ...) ORDER BY ... LIMIT ...
完全与子查询无关。
这没有在MySQL中记录,但是从语法上是显而易见的:
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; }
;
我正在尝试更新名为的数据库中名为的表。该表的主键是。 当我运行以下语句时: 我收到一个错误,上面写着“您正在使用安全更新模式,并且您试图更新一个没有使用键列的WHERE的表。” 我在谷歌上搜索了那个错误消息,大多数回复都是“你必须使用子句或关闭安全模式”。但正如您所看到的,我使用的是子句。如果我有子句,为什么会出现错误? MySQL服务器版本5.6。20
问题内容: 它说 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第4行“ airlines.iaco_code = airport.iaco_code完全外部联接”附近使用 语法对我来说似乎正确。我以前从未做过很多联接,但是我需要一个表中的那些列,这些列被各种ID交叉引用。 问题答案: MySQL中没有。见7.2.12。外连接简化和12.2.8.1。JOIN语
问题内容: 以下语句给出相同的结果(一个使用,另一个使用): 我只能看到在左外部联接的情况下找到“无与伦比”的情况:( 以找出从未有人发送过的礼物) 在这种情况下,它首先使用,然后使用。是否先做匹配,然后做“辅助”过滤?还是有使用vs 的更一般规则?谢谢。 问题答案: 是整个查询的一部分,是每个单独联接的一部分。 只能引用以前使用的表的字段。 如果与左表中的记录没有实际匹配,则从右表中返回一条记录
我的php文件有问题。当提交表单时,有一个名为“在我的PHP文件中未定义索引”的错误 错误:在(PID,PInvoice_no,p_description,unit_price,quantity,total)值('','','','','')中插入SQL语法有错误;请查看与您的MariaDB服务器版本相对应的手册,以了解在第1行“”、“”、“)”附近使用的正确语法 我试了好几次都找不到那个错误。我
问题内容: 所以我在推特上看到了这两个 问题。语法错误怎么回事,但不是吗? 问题答案: 我猜想,如果可能的话,贪婪地将其解析为数字的一部分,使其成为 ,而不是方法调用的一部分。 小数点附近不能有空格,但是在方法调用中,您可以在空格前后添加空格。如果数字后跟一个空格,则该数字的解析将终止,因此无歧义。 让我们看一下不同的情况及其解析方式: