我正在尝试从不同的表中选择字段并使用 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/