当前位置: 首页 > 面试题库 >

您如何在MySQL中使用“ WITH”子句?

牛骞仕
2023-03-14
问题内容

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


 类似资料:
  • 本文向大家介绍如何在MySQL中正确使用WITH ROLLUP?,包括了如何在MySQL中正确使用WITH ROLLUP?的使用技巧和注意事项,需要的朋友参考一下 使用WITH ROLLUP的语法如下- 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是在MySQL中正确使用WITH ROLLUP的查询- 这将产生以下输出-

  • 本文向大家介绍如何在Oracle中使用WITH子句定义函数?,包括了如何在Oracle中使用WITH子句定义函数?的使用技巧和注意事项,需要的朋友参考一下 问题: 您想使用WITH子句在Oracle中定义一个函数。 解 从Oracle Database 12.1开始,您可以在出现SELECT语句的同一SQL语句中定义函数和过程。通过允许两个步骤都在SQL引擎中进行,从而允许在PL / SQL和SQ

  • 本文向大家介绍如何在MySQL LIKE子句中使用用户变量?,包括了如何在MySQL LIKE子句中使用用户变量?的使用技巧和注意事项,需要的朋友参考一下 使用该函数,我们可以在LIKE子句中使用用户变量。语法如下。 为了理解上述语法,让我们首先创建一个表。创建表的查询如下。 使用insert命令在表中插入记录。查询如下。 使用select语句显示表中的所有记录。查询如下 以下是输出。 这是在LI

  • 本文向大家介绍如何在JDBC中使用try-with-resources?,包括了如何在JDBC中使用try-with-resources?的使用技巧和注意事项,需要的朋友参考一下 每当我们实例化并使用某些对象/资源时,都应显式关闭它们,否则有可能发生资源泄漏。 通常,我们使用finally资源使用close资源作为- 从JSE7开始,引入了try-with-resources语句。在这种情况下,我

  • 问题内容: 我正在使用felixge的客户端。我没有使用ORM。 我正在用Vows进行测试,并希望能够模拟我的数据库(可能使用Sinon)。由于除之外我本身还没有DAL ,因此我不确定如何执行此操作。我的模型大多是带有许多吸气剂的简单CRUD。 关于如何实现此目标的任何想法? 问题答案: 使用sinon,您可以在整个模块上放置一个模拟或存根。例如,假设模块具有一个功能: ,是您期望的输入。是您期望

  • 问题内容: 我有一种使用JDBC从数据库中获取用户的方法: 我应该如何使用来改进此代码? 我已经尝试使用下面的代码,但是它使用了很多块,并且并没有太大地提高可读性。我应该以其他方式使用吗? 问题答案: 在你的示例中,无需进行外部尝试,因此你至少可以从3降为2,并​​且也不需要在资源列表的末尾关闭。使用两个try块的优点是所有代码都在前面显示,因此你不必引用单独的方法: