我已经在几个主题中搜索了如何解决这个问题,我在使用 CONCAT 的查询时遇到了这个问题,但即使 concat 为空,我也必须返回组,并且我发现了 2 个不起作用的解决方案。
第一个解决方案是使用 ISNULL:
#1582 - Incorrect parameter count in the call to native function 'ISNULL'
其次是使用部分工作的 IFNULL ,它确实找到了哪些不为空但不打印空的。
这是查询:
SELECT g.name, IFNULL(GROUP_CONCAT(c.name),'') AS commands
FROM site_access b
JOIN groups g ON b.group_id = g.id
JOIN group_commands gc ON g.id = gc.group_id
JOIN commands c ON gc.command_id = c.id
WHERE b.site_id = 1
GROUP BY g.name
ORDER BY g.status ASC
我有 8 个 site_access,8 个组,目前已注册,只有 2 个命令分配给第 1 组和第 2 组,目前发生的是它确实打印了这 2 个组,但忽略了所有其余的组,因为它们没有命令。
以下是输出示例:
Admin - add, del, announce
Member - find
期望的输出:
Admin - add, del, announce
Member - find
Banned
OhterGroup1
OhterGroup2
OhterGroup3
OhterGroup4
OhterGroup5
如果您需要有关表的更多信息,这里有一个示例: MySQL query for multiple tables are secondary tables multiple items?