- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 MySQL 8.0 json_arrayagg被引入,这使得聚合 json 结果成为可能。
现在我想用它来显示附加到消息的标签。
目前有这三个表(简化)
CREATE TABLE IF NOT EXISTS feed_message (
id CHAR(36) PRIMARY KEY
);
CREATE TABLE IF NOT EXISTS feed_tag (
id CHAR(36) PRIMARY KEY,
name VARCHAR(30) NOT NULL
);
CREATE TABLE IF NOT EXISTS feed_message_tag (
message CHAR(36) NOT NULL,
tag CHAR(36) NOT NULL,
PRIMARY KEY (message, tag)
);
所以有一个表包含消息,一个表包含所有标签,还有一个表包含标签和消息之间的连接 (feed_message_tag)。
我正在寻找的响应是一个带有一列标签的消息列表,它是一个带有 id + 名称的对象数组。所以接下来的事情
[{"id": 1, "name": "Foo"}]
现在我找到的例子使用(内部)连接,这意味着消息必须有一个标签,但情况并非总是如此,所以使用左连接。这让我想到了我使用的以下查询
SELECT
json_arrayagg(
json_object(
'id',
ft.id,
'name',
ft.name
)
) as 'tags'
FROM feed_message fm
LEFT JOIN feed_message_tag fmt ON fmt.message = fm.id
LEFT JOIN feed_tag ft ON fmt.tag = ft.id
GROUP BY fm.id
现在的问题是,如果一条消息没有标签,我会得到以下输出作为 tags
。
[{"id": null, "name": null}]
经过一些搜索和调整后,我对 tags
列进行了以下更改
IF(
fmt.message IS NULL,
json_array(),
json_arrayagg(
json_object(
'id',
ft.id,
'name',
ft.name
)
)
) as 'tags'
这是预期的行为还是我做错了什么?
最佳答案
看来您的方法可能是唯一的方法。
原因是 NULL
是包含在 JSON 对象中的有效值。虽然大多数聚合函数会忽略空值,因此它们会正确地忽略来自 LEFT JOIN
的非匹配行,但这对 JSON_ARRAYAGG()
来说是个问题。它会阻止您在其他情况下包含空值。无法区分显式空值和 LEFT JOIN
空值。
关于MySQL json_arrayagg 左连接没有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49960156/
使用 MySQL 8.0 json_arrayagg被引入,这使得聚合 json 结果成为可能。 现在我想用它来显示附加到消息的标签。 目前有这三个表(简化) CREATE TABLE IF NOT
大家好,有谁知道如何过滤数据或使用类似运算符对 JSON_ARRAYAGG() 中的数据进行排序, 我想在以下查询中添加 Like 运算符。我是 MySQL 新手,如何实现这一点 SELECT s.s
所以我试图将一个不同的单列查询的结果放入一个 JSON 数组中,以便它可以在我的 Web 服务器上使用。我已经设置了这样的东西: SELECT JSON_OBJECT( 'ArrayKey' VA
最近安装了MySQL 8.0.11 GA,想优化一些 View ,函数,...通常我有这样的东西: CREATE TABLE `PublicHoliday` ( `PublicHoliday_ID
我想对 json_arrayagg() 返回的数组进行排序。我的查询与此类似:- select A, json_arrayagg(json_obj('X',value1, 'Y',value2)) A
使用 Oracle 19c: 我有以下查询,其中子选择(通过 plans1_.ID 链接到主选择)使用 JSON_ARRAYAGG功能。 select ... , /* Other colum
也许我错过了什么。但是为什么没有这个功能呢? 根据文档,它应该是: https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html 版本
问题是数组颜色中带有引号的反斜杠。我认为这是因为 JSON_ARRAYAGG 但我不知道如何打印正确的 json。 查询: SELECT a.id_product, JSON_ARRAYAGG(c.n
我有疑问: SELECT id, JSON_ARRAYAGG(url) AS urlLinks FROM links WHERE id=832781 GROUP BY id; 此查询的结果在urlLi
使用 JSON_ARRAYAGG 函数时,限制子句似乎不起作用。 有没有更好的方法来实现该功能? SELECT * FROM USER_TABLE ORDER BY RAND() LIMIT 2; -
找不到具有兼容参数的名为“FUNCTION”类型的名为“JSON_ARRAYAGG”的授权例程 在DB2中使用JSON_ARRAYAGG函数时出错: QUERY: SELECT
set countt = PAGE_ * 5 - 5; set @data = (select JSON_ARRAYAGG(JSON_OBJECT('id', room_partici
SQL 示例... SELECT ID AS HID, JSON_ARRAYAGG( JSON_OBJECT('sequence': TRIM(SEQUENCE),
我正在使用 Oracle 19c 和 JSON_ARRAYAGG 函数(使用 JSON_OBJECT)返回 JSON 对象的串联数组字符串。我需要根据 ORDER BY SENT_DATE DESC
我是一名优秀的程序员,十分优秀!