SELECT 查询何时以“With”开头

Chi*_*rai 0 mysql sql odbc jdbc

我正在阅读这个问题如何确定 JAVA 中 jdbcTemplate 的 sql 查询类型?. 正确答案是,SELECT 查询可以以 aSELECT或 a开头WITH

仅供参考,答案说:

// SELECT subqueries are irrelevant for the final result. So the command, the first verb is indicative of the result (int updateCount vs. ResultSet).

boolean isSqlSelect = sql.toUpperCase().startsWith("SELECT")
                   || sql.toUpperCase().startsWith("WITH");
Run Code Online (Sandbox Code Playgroud)

所以,现在让我们说我有一个查询

SELECT id, name, email FROM users;
Run Code Online (Sandbox Code Playgroud)

问题

  1. 如何重写以 a 开头的查询WITH
  2. 尽管问题是针对 JDBC 的,但它是否对所有 SQL 和 ODBC/JDBC 都通用?

Gor*_*off 5

WITH公用表表达式(CTE)的语法。这是所有合理数据库基本上都支持的标准 SQL 语法(MySQL 是最后一个添加这种支持的)。

CTE 用于定义可以在查询中多次引用的子查询。

请注意,CTE 可以与UPDATEandDELETE语句一起使用SELECT,因此它们不一定表示 a SELECT

  • @Chilarai 我对此进行了研究,发现除了 Informix 之外,所有主要的 SQL 实现现在都支持 CTE 的“WITH”语法(MySQL 8.0 是最后一个采用它的)。/sf/answers/22767041/ (2认同)