gpt4 book ai didi

mysql - 将 SQL 结果行合并在一起

转载 作者:行者123 更新时间:2023-12-01 00:53:16 26 4
gpt4 key购买 nike

我正在开发一个 EAV 存储系统,用于存储关于对象的无模式元数据,现在正在研究一种使其可搜索的方法,但大部分处理由数据库服务器完成。

EAV 的表是:

`entityID` - INT(11)
`entity` - VARCHAR(128)
`attribute` - VARCHAR(128)
`value` - BLOB

这是我的声明:

SELECT 
`entity`,
(CASE WHEN `attribute` = 'bob' THEN `value` ELSE NULL END) `bob`,
(CASE WHEN `attribute` = 'dean' THEN `value` ELSE NULL END) `dean`
FROM `eav`

它返回一组不错的行(如预期的那样):

+----------+------+------+
| entity | bob | dean |
+----------+------+------+
| testEnt | foo | NULL | // attribute = bob
+----------+------+------+
| testEnt | NULL | NULL | // another test attribute
+----------+------+------+
| testEnt | NULL | NULL | // another test attribute
+----------+------+------+
| testEnt2 | foo | NULL | // attribute = bob
+----------+------+------+
| testEnt2 | NULL | foo | // attribute = dean
+----------+------+------+

但是当我附加 GROUP BY (Entity) 时,结果变成了这样:

+----------+------+------+
| entity | bob | dean |
+----------+------+------+
| testEnt | foo | NULL |
+----------+------+------+
| testEnt2 | foo | NULL |
+----------+------+------+

所以在停止工作之后使用 HAVING 语法。有没有办法让返回的结果是:

+----------+------+------+
| entity | bob | dean |
+----------+------+------+
| testEnt | foo | NULL |
+----------+------+------+
| testEnt2 | foo | foo |
+----------+------+------+

最佳答案

唯一的问题是您对您的记录进行了GROUP,但您还没有聚合字段。通过使用 MAX 聚合字段来尝试。

SELECT 
`entity`,
MAX(CASE WHEN `attribute` = 'bob' THEN `value` ELSE NULL END) `bob`,
MAX(CASE WHEN `attribute` = 'dean' THEN `value` ELSE NULL END) `dean`
FROM `eav`
GROUP BY `entity`

关于mysql - 将 SQL 结果行合并在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13399683/

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