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

数组值构造函数

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

ARRAY 值构造器允许将单列、非 标量子查询 的结果收集到具有 ARRAY 数据类型语义(序号在元素上定义)的单个嵌套集合值中。

例如,让我们找到

  • 所有作者。
  • 该作者的书籍出版的语言。
  • 该作者书籍可供购买的书店。

这可以在单个查询中完成

SELECT
  AUTHOR.FIRST_NAME,
  AUTHOR.LAST_NAME,
  ARRAY(
    SELECT DISTINCT LANGUAGE.CD
    FROM BOOK
    JOIN LANGUAGE ON BOOK.LANGUAGE_ID = LANGUAGE.ID
  ) AS BOOKS,
  ARRAY(
    SELECT DISTINCT BOOK_TO_BOOK_STORE.BOOK_STORE_NAME
    FROM BOOK_TO_BOOK_STORE
    JOIN BOOK ON BOOK_TO_BOOK_STORE.BOOK_ID = BOOK.ID
    WHERE BOOK.AUTHOR_ID = AUTHOR.ID
  ) AS BOOK_STORES
FROM AUTHOR
ORDER BY AUTHOR.ID
var result = create.select(
          AUTHOR.FIRST_NAME,
          AUTHOR.LAST_NAME,
          array(
              selectDistinct(BOOK.language().CD)
              .from(BOOK)
              .where(BOOK.AUTHOR_ID.eq(AUTHOR.ID))
          ).as("books"),
          array(
              selectDistinct(BOOK_TO_BOOK_STORE.BOOK_STORE_NAME)
              .from(BOOK_TO_BOOK_STORE)
              .where(BOOK_TO_BOOK_STORE.tBook().AUTHOR_ID.eq(AUTHOR.ID))
          ).as("book_stores"))
      .from(AUTHOR)
      .orderBy(AUTHOR.ID)
      .fetch();

上面的 var result 被推断为

Result<Record4<String, String, String[], String[]>> result =

以上查询的结果可能如下所示

+----------+---------+--------+--------------------------------------------------+
|first_name|last_name|books   |book_stores                                       |
+----------+---------+--------+--------------------------------------------------+
|George    |Orwell   |[en]    |[Ex Libris, Orell Füssli]                         |
|Paulo     |Coelho   |[de, pt]|[Buchhandlung im Volkshaus, Ex Libris, Orell Fü...|
+----------+---------+--------+--------------------------------------------------+

反馈

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

The jOOQ Logo