可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

别名列

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

就像 一样,列也可以使用别名重命名。这是一个例子

  SELECT FIRST_NAME || ' ' || LAST_NAME author, COUNT(*) books
    FROM AUTHOR
    JOIN BOOK ON AUTHOR.ID = AUTHOR_ID
GROUP BY FIRST_NAME, LAST_NAME;

这是使用 jOOQ 完成的方式

Record record = create.select(
         concat(AUTHOR.FIRST_NAME, inline(" "), AUTHOR.LAST_NAME).as("author"),
         count().as("books"))
      .from(AUTHOR)
      .join(BOOK).on(AUTHOR.ID.eq(BOOK.AUTHOR_ID))
      .groupBy(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
      .fetchAny();

当您像上面这样对字段进行别名时,您可以使用别名访问这些字段的值

System.out.println("Author : " + record.getValue("author"));
System.out.println("Books  : " + record.getValue("books"));

未命名的列表达式

在大多数 SQL 数据库中,顶层选择中列表达式的别名是可选的。数据库将生成一个大致基于该表达式的列名,用于文档目的(例如,在 SQL Developer 等工具中运行查询时),但应用程序不能显式地依赖该名称。这不是问题,因为仍然可以通过索引引用列。

以类似的方式,jOOQ 将为列表达式假定一个未指定的、生成的列名,该名称基于它们的内容。

-- Arithmetic expression
1 + 2

-- Correlated subquery
(SELECT 1 AS a)
// Arithmetic expression
inline(1).plus(inline(2));

// Correlated subquery
field(select(inline(1).as("a")));

这些未命名的表达式既可以在 SQL 中使用,也可以在 jOOQ 中使用。但是,请注意,jOOQ 将使用 Field.getName() 从字段中提取此列名,在引用该字段或将其嵌套在派生表中时。为了完全控制任何此类列名,始终为 SQL 和 jOOQ 中的列表达式提供显式别名是一个好主意。

渲染声明或引用

相同的别名列实例根据它在 jOOQ 表达式树中的位置而呈现方式不同。有关更多详细信息,请参阅手册中关于 渲染声明与引用 的部分。

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo