mysql - 如何在 MySQL 中使用 "WITH"子句

熊孩纸 阅读:4 2023-05-25 15:08:15 评论:0

我正在将我的所有 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 

请您参考如下方法:

MySQL 8.0 之前的版本doesn't support the WITH clause (SQL Server 中的 CTE;Oracle 中的子查询因子),因此您可以使用:

  • 临时表
  • 派生表
  • 内联 View (实际上是 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 


标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

全民解析

全民解析

关注我们