SELECT 查询何时以 'With' 开头

When does SELECT query starts with a 'With'

我正在阅读这个问题。正确答案是,SELECT 查询可以以 SELECTWITH.

开头

仅供参考,回答说:

// 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");

所以,现在假设我有一个查询

SELECT id, name, email FROM users;

问题

  1. 如何重写以 WITH 开头的查询?
  2. 虽然问题是针对 JDBC 的,但它对所有 SQL 和 ODBC/JDBC 来说都是常见的吗?

WITHcommon table expressions (CTE) 的语法。这是所有合理的数据库基本上都支持的标准 SQL 语法(MySQL 是最后一个添加这种支持的)。

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

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

由于您还询问了如何使用 CTE 重写查询...

with cte as

(select id, name, email 
 from users)

select * from cte;

我发现在 with 子句中尽早定义列名会更清晰,因此我为我的 select

保留了一些 space
with cte (id, name, email) as

(select *
 from users)

select * from cte;