MySQL子查询怪癖还是预期的行为?

时间:2016-01-22 22:35:04

标签: mysql

我试图获得有关MySQL数据库的更多知识,并且我希望此处有人能够向我解释以下问题,因为我无法在任何地方找到这个特定的行为:

这有效:

SELECT justaname FROM (SELECT productName AS justaname FROM kclbs_products) sdfsdfsd

虽然没有:

SELECT justaname FROM (SELECT productName AS justaname FROM kclbs_products) 

这真的很让我感到困惑,我相信这是一个怪癖,因为无论我怎样转动字符串' sdfsdfsd'无关紧要,查询仍然有效,即使它只是一个字符(或者是一个非常大的字符序列)。这个问题'目前对我来说并不代表一个问题,但我真的很想知道“为什么'我可以在任何可能的未来处理这种行为,我必须这样做。

提前致谢。

[UPDATE] 两个用户帮我提供了我的问题的答案,所以它解决了,谢谢!

2 个答案:

答案 0 :(得分:2)

子查询名称

SELECT ... FROM (subquery) [AS] name ...

以下是mysql文档的参考文献 [AS] name子句是必需的,因为FROM子句中的每个表都必须具有名称。子查询选择列表中的任何列都必须具有唯一的名称。

有关更多信息,请使用https://dev.mysql.com/doc/refman/5.7/en/from-clause-subqueries.html

答案 1 :(得分:0)

这与MySQL无关,而且它在所有DBMS中都是一个规则。如果在FROM子句中使用子查询,则必须使用别名。

当您在子查询之后编写内容(如sdfsdfsd)时,DBMS会将其视为从子查询派生的表的别名

您可以在FROM子句中看到有关子查询的一些信息:

  1. https://dev.mysql.com/doc/refman/5.7/en/from-clause-subqueries.html
    1. http://www.geeksengine.com/database/subquery/subquery-in-from-clause.php
    2. 它也在subquery in FROM must have an alias
    3. 中解释过