我正在将所有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 prior to version 8.0 100(SQL Server术语中的CTE;Oracle中的子查询分解),因此您只需要使用:

  • 临时桌子
  • 派生表
  • 内联视图(实际上WITH子句代表的是什么——它们是可互换的)

该功能的申请可追溯到2006年.

如前所述,您提供了一个糟糕的示例——如果您没有以任何方式更改列的输出,则无需执行subselect:

  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

Mysql相关问答推荐

SQL:CAST与窗口函数组合导致语法错误

如何从MySQL数据库中提取入职第一个月的工作天数?

如何在sql中包含0作为计数?

MySQL 计数出现的百分比大于

将类图转换为SQL数据库

发生的原因及解决方法

MySQL 8.0 可以在 Select 语句中返回 JSON 对象数组吗?

如何本地化 MySQL 表中的实体?

如何在 MySQL 中使用从 SELECT IF 返回的布尔值

SQL从字典中的键获取值

包含 group_contact 的视图的问题

查询以从约会表中获取可用空档

如何根据特定条件从mysql数据库中 Select 查询

如何在sql中挑出某些名称

MySQL计算特定值的列

如何存储重复日期牢记夏令时

#1146 - 表 'phpmyadmin.pma_recent' 不存在

在 Mac 上设置 Laravel php artisan migrate 错误:没有这样的文件或目录

在 Postgresql 中模拟 MySQL 的 ORDER BY FIELD()

如何从邮箱地址中 Select 域名