MySQL“WITH”子句

我试图使用MySQL创建一个视图与“WITH”子句

WITH authorRating(aname, rating) AS
   SELECT aname, AVG(quantity)
   FROM book
   GROUP BY aname

但它似乎不支持MySQL。

我认为这是非常标准,我相信Oracle支持这一点。有没有反正强制MySQL使用“WITH”子句?我试过它的MyISAM和innoDB引擎。这两个都不工作。

更新:MySQL 8.0终于获得通用表表达式的功能,包括递归CTE。

这是一个博客宣布它:http://mysqlserverteam.com/mysql-8-0-labs-recursive-common-table-expressions-in-mysql-ctes/

下面是我早期的答案,我最初写在2008年。

MySQL不支持使用在SQL-99中定义的WITH语法的查询,也称为公用表表达式。

这是MySQL自2006年1月以来的一个功能请求:http://bugs.mysql.com/bug.php?id=16244

其他支持常用表表达式的RDBMS产品:

> Oracle 9i Release 2及更高版本:
http://www.oracle-base.com/articles/misc/with-clause.php
> Microsoft SQL Server 2005及更高版本:
http://msdn.microsoft.com/en-us/library/ms190766(v=sql.90).aspx
> IBM DB2 UDB 8及更高版本:
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0000879.htm
> PostgreSQL 8.4及更高版本:
https://www.postgresql.org/docs/current/static/queries-with.html
> Sybase 11及更高版本:
http://dcx.sybase.com/1100/en/dbusage_en11/commontblexpr-s-5414852.html
> SQLite 3.8.3及更高版本:
http://sqlite.org/lang_with.html
> HSQLDB:
http://hsqldb.org/doc/guide/dataaccess-chapt.html#dac_with_clause
> Firebird 2.1及更高版本(第一个支持递归查询的开源DBMS):
http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes210.html#rnfb210-cte
> H2数据库(但只有递归):
http://www.h2database.com/html/advanced.html#recursive_queries

其他不支持WITH子句的数据库(截至2014年2月):

> Informix(虽然Informix支持Oracle曾经使用过的CONNECT BY语法)
http://pic.dhe.ibm.com/infocenter/idshelp/v115/index.jsp?topic=%2Fcom.ibm.sqls.doc%2Fids_sqs_2033.htm

http://stackoverflow.com/questions/324935/mysql-with-clause

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:MySQL“WITH”子句