2

我正在使用我认为在 MySQL 中称为“派生表”的东西,并注意到我的查询仅在我在语句x之后有这个时才起作用:FROM()

SELECT * FROM( <inner select> ) x ORDER BY id ASC
// -----------------------------^

我环顾四周并阅读了几篇关于派生表的文章,但没有一篇提到这一点(我看到的所有示例甚至都没有使用它,尽管我的测试在没有它的情况下返回 0 行)。我在回答我之前的一个问题时遇到了它。

如果有任何区别,我将通过 PDO 运行查询。

4

2 回答 2

6

x是子数据集的别名前缀。就像从桌子上挑选一样。

SELECT test_id from tableA x;

将使您的结果可以通过x.test_id. 这对于缩短表和汇总子数据集很有用。

SELECT * FROM (SELECT test_id FROM tableA) x;

会提供x.test_id

Jonathan Leffler 的补充说明:SQL 标准规定别名是强制性的。

参考这篇博文了解别名的优点: http ://openquery.com/blog/good-practice-bad-practice-table-aliases

于 2013-09-09T06:32:58.963 回答
4

x是来自内部 select的结果表的名称。该名称可以是任何有效的表名,而不仅仅是x.

子查询在 SELECT 语句的 FROM 子句中是合法的。实际语法是:

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

[AS] name 子句是强制性的,因为 FROM 子句中的每个表都必须有一个名称。

参考http ://dev.mysql.com/doc/refman/5.0/en/from-clause-subqueries.html

于 2013-09-09T06:33:08.447 回答