gpt4 book ai didi

oracle - 如何在 JSON_ARRAYAGG 中返回不同的值

转载 作者:行者123 更新时间:2023-12-02 00:53:54 25 4
gpt4 key购买 nike

所以我试图将一个不同的单列查询的结果放入一个 JSON 数组中,以便它可以在我的 Web 服务器上使用。我已经设置了这样的东西:

SELECT JSON_OBJECT(
'ArrayKey' VALUE JSON_ARRAYAGG( col )
) AS jsonResult
FROM(SELECT DISTINCT column_name AS col
FROM tbl_name);

但是,当此查询返回结果时,它在 JSON 中生成的数组包含我的列中的所有值,并以某种方式忽略子查询中的 DISTINCT 子句。每当我摆脱 JSON_ARRAYAGG 子句并直接输出结果时,结果是唯一的,但是当我重新添加它时,命令会被忽略。我也尝试将 DISTINCT 子句放在 JSON_ARRAYAGG 中,就像这样:
SELECT JSON_OBJECT(
'ArrayKey' VALUE JSON_ARRAYAGG( DISTINCT col )
) AS jsonResult
FROM(SELECT DISTINCT column_name AS col
FROM tbl_name);

无济于事。有谁知道我的代码出了什么问题导致数组输出所有值而不是不同的值?

最佳答案

有趣......对我来说看起来像一个错误。优化器似乎过于急切地向下推。

作为解决方法,您可以使用 NO_MERGE提示子查询。

SELECT /*+NO_MERGE(x)*/
json_object('ArrayKey'
VALUE json_arrayagg(column_name)) jsonresult
FROM (SELECT DISTINCT
column_name
FROM tbl_name) x;

CTE 和 MATERIALIZE提示似乎也有效。
WITH cte
AS
(
SELECT /*+MATERIALIZE*/
DISTINCT
column_name
FROM tbl_name
)
SELECT json_object('ArrayKey'
VALUE json_arrayagg(column_name)) jsonresult
FROM cte;

db<>fiddle

关于oracle - 如何在 JSON_ARRAYAGG 中返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com