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

INCLUDE_NULL_VALUES指令

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

INCLUDE_NULL_VALUES 指令允许在输出文档中包含 NULL 值。

默认情况下,NULL 值会从 FOR JSON 文档输出中省略。考虑以下查询

SELECT 
  id, 
  nullif(cd, 'en') AS cd
FROM langauge
ORDER BY id
FOR JSON AUTO
 
create.select(
            LANGUAGE.ID, 
            nullif(LANGUAGE.CD, "en").as(LANGUAGE.CD))
      .from(LANGUAGE)
      .orderBy(LANGUAGE.ID)
      .forJSON().auto()
      .fetch();

此查询生成如下文档

[
  {"id":1},
  {"id":2,"cd":"de"},
  {"id":3,"cd":"fr"},
  {"id":4,"cd":"pt"}
]

如果您更喜欢显式的 NULL 值,请编写

SELECT 
  id, 
  nullif(cd, 'en') AS cd
FROM langauge
ORDER BY id
FOR JSON AUTO, INCLUDE_NULL_VALUES
 
create.select(
            LANGUAGE.ID, 
            nullif(LANGUAGE.CD, "en").as(LANGUAGE.CD))
      .from(LANGUAGE)
      .orderBy(LANGUAGE.ID)
      .forJSON().auto().includeNullValues()
      .fetch();

此查询生成如下文档

[
  {"id":1,"cd":null},
  {"id":2,"cd":"de"},
  {"id":3,"cd":"fr"},
  {"id":4,"cd":"pt"}
]

方言支持

此示例使用 jOOQ

select(BOOK.ID).from(BOOK).orderBy(BOOK.ID).forJSON().auto().includeNullValues()

翻译成以下特定方言的表达式

Aurora Postgres, CockroachDB, Postgres, YugabyteDB

SELECT json_agg(json_build_object('ID', ID))
FROM (
  SELECT BOOK.ID
  FROM BOOK
  ORDER BY BOOK.ID
) t

ClickHouse

SELECT toJSONString(CAST(groupArray(toJSONString(map('ID', ID))) AS Array(JSON)))
FROM (
  SELECT BOOK.ID
  FROM BOOK
  ORDER BY BOOK.ID
) t

DB2

SELECT CAST(('[' || listagg(
  json_object(
    KEY 'ID' VALUE ID
    NULL ON NULL
  ),
  ','
) || ']') AS varchar(32672))
FROM (
  SELECT BOOK.ID
  FROM BOOK
  ORDER BY BOOK.ID
) t

H2

SELECT json_arrayagg(json_object(
  KEY 'ID' VALUE ID
  NULL ON NULL
))
FROM (
  SELECT BOOK.ID
  FROM BOOK
  ORDER BY BOOK.ID
) t

MariaDB, MySQL

SET @t = @@group_concat_max_len;
SET @@group_concat_max_len = 4294967295;
SELECT json_merge_preserve(
  '[]',
  concat(
    '[',
    group_concat(json_object('ID', ID) SEPARATOR ','),
    ']'
  )
)
FROM (
  SELECT BOOK.ID
  FROM BOOK
  ORDER BY BOOK.ID
) t;
SET @@group_concat_max_len = @t;

Oracle

SELECT json_arrayagg(json_object(
  KEY 'ID' VALUE ID
  NULL ON NULL
  RETURNING clob
) FORMAT JSON RETURNING clob)
FROM (
  SELECT BOOK.ID
  FROM BOOK
  ORDER BY BOOK.ID
) t

SQLServer

SELECT (
  SELECT BOOK.ID
  FROM BOOK
  ORDER BY BOOK.ID
  FOR JSON AUTO, INCLUDE_NULL_VALUES
)

Trino

SELECT cast(array_agg(CAST(map_from_entries(ARRAY[row(
  'ID',
  CAST(ID AS json)
)]) AS json)) AS json)
FROM (
  SELECT BOOK.ID
  FROM BOOK
  ORDER BY BOOK.ID
) t

ASE, Access, Aurora MySQL, BigQuery, Databricks, Derby, DuckDB, Exasol, Firebird, HSQLDB, Hana, Informix, MemSQL, Redshift, SQLDataWarehouse, SQLite, Snowflake, Sybase, Teradata, Vertica

/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

引用此页

反馈

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

The jOOQ Logo