我正在将所有SQL Server查询都转换为MySQL,并且WITH其中所有查询都失败了。这是一个例子:
WITH t1 AS ( SELECT article., userinfo., category.* FROM question INNER JOIN userinfo ON userinfo.user_userid = article.article_ownerid INNER JOIN category ON article.article_categoryid = category.catid WHERE article.article_isdeleted = 0 ) SELECT t1.* FROM t1 ORDER BY t1.article_date DESC LIMIT 1, 3
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
8.0之前的MySQL 不支持WITH子句(在SQL Server中为CTE;在Oracle中为子查询分解),因此您只能使用:
临时表 派生表 内联视图(有效地代表WITH子句-它们是可互换的) 该功能的请求可以追溯到2006年。
如前所述,您提供了一个糟糕的示例-如果您不以任何方式更改列的输出,则无需执行子选择:
SELECT * FROM ARTICLE t JOIN USERINFO ui ON ui.user_userid = t.article_ownerid JOIN CATEGORY c ON c.catid = t.article_categoryid WHERE t.published_ind = 0 ORDER BY t.article_date DESC LIMIT 1, 3 这是一个更好的例子:
SELECT t.name, t.num FROM TABLE t JOIN (SELECT c.id COUNT(*) 'num' FROM TABLE c WHERE c.column = 'a' GROUP BY c.id) ta ON ta.id = t.id来源:stack overflow