SELECT 查询何时以 'With' 开头
When does SELECT query starts with a 'With'
我正在阅读这个问题。正确答案是,SELECT 查询可以以 SELECT
或 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");
所以,现在假设我有一个查询
SELECT id, name, email FROM users;
问题
- 如何重写以
WITH
开头的查询?
- 虽然问题是针对 JDBC 的,但它对所有 SQL 和 ODBC/JDBC 来说都是常见的吗?
WITH
是 common table expressions (CTE) 的语法。这是所有合理的数据库基本上都支持的标准 SQL 语法(MySQL 是最后一个添加这种支持的)。
CTE 用于定义可以在查询中多次引用的子查询。
请注意,CTE 可以与 UPDATE
和 DELETE
语句以及 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;
我正在阅读这个问题SELECT
或 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");
所以,现在假设我有一个查询
SELECT id, name, email FROM users;
问题
- 如何重写以
WITH
开头的查询? - 虽然问题是针对 JDBC 的,但它对所有 SQL 和 ODBC/JDBC 来说都是常见的吗?
WITH
是 common table expressions (CTE) 的语法。这是所有合理的数据库基本上都支持的标准 SQL 语法(MySQL 是最后一个添加这种支持的)。
CTE 用于定义可以在查询中多次引用的子查询。
请注意,CTE 可以与 UPDATE
和 DELETE
语句以及 SELECT
一起使用,因此它们不一定表示 SELECT
.
由于您还询问了如何使用 CTE 重写查询...
with cte as
(select id, name, email
from users)
select * from cte;
我发现在 with
子句中尽早定义列名会更清晰,因此我为我的 select
with cte (id, name, email) as
(select *
from users)
select * from cte;