mysql - 如果一个字段为 NULL,GROUP_CONCAT 返回一行 NULL

标签 mysql sql

我正在尝试从不同的表中选择字段并使用 GROUP_CONCAT() 对行进行分组。但是,如果 GROUP_CONCAT() 中的某个字段返回 NULL,则所选的整行都将为 NULL。

'achievement' 和 'social' 字段允许为空。每个个人资料可以有多行成就和社交。

我尝试使用 COALESCE 更改查询但没有成功:

  SELECT p.UserId, p.Username, p.TextInfo,   GROUP_CONCAT(DISTINCT CONCAT(COALESCE(a.Rank,''), '#', COALESCE(a.Tourney,''))) AS achievements,    GROUP_CONCAT(DISTINCT CONCAT(COALESCE(s.platform,''),'#', COALESCE(s.URL,''))) AS socials   from profile p   INNER JOIN achievement a ON p.UserId = a.UserId   INNER JOIN social s ON p.UserId = s.UserId   WHERE p.Username LIKE '%uagib%'

预期结果:

<UserId> | <Username> | <TextInfo> | (multiple) <Rank>#<Tourney> | (multiple) <Platform>#<URL> |

最佳答案

Group by 子句缺失

SELECT p.UserId, p.Username, p.TextInfo,   
GROUP_CONCAT(DISTINCT CONCAT(COALESCE(a.Rank,''), '#', COALESCE(a.Tourney,''))) AS achievements,    
GROUP_CONCAT(DISTINCT CONCAT(COALESCE(s.platform,''),'#', COALESCE(s.URL,''))) AS socials   
from profile p INNER JOIN achievement a ON p.UserId = a.UserId   
INNER JOIN social s ON p.UserId = s.UserId   
WHERE p.Username LIKE '%uagib%'
group by p.UserId, p.Username, p.TextInfo

关于mysql - 如果一个字段为 NULL,GROUP_CONCAT 返回一行 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58833918/

相关文章:

mysql - 选择多对多表中仅具有一个映射的列

sql - 在 PostgreSQL 中将列数据转换为行

sql - 选择 SQL Server 中每个唯一组合的最后一行

mysql - 使用 include 时 where 子句中的未知列错误

python - 无法使用 pyplot、pandas : _tkinter. TclError 绘制图形:无显示名称且无 $DISPLAY 环境变量

定义 INNER JOIN 表时 MySQL 存储函数语法错误

java - Hibernate如何删除连接表中具有空列的行

php - 使用数组创建 SQL 表

sql - 购物车的 ERD

mysql - 多次引用同一个表的 SQL 递归查询