CONCAT仅返回非空行

时间:2011-06-24 21:19:25

标签: mysql sql null concat

我已经在一些主题中搜索了如何解决这个问题,我正在使用一个使用CONCAT但仍然必须返回组的查询,即使concat为null并且我找到了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,目前发生的是它确实打印了这两个组,但忽略了所有其他组,因为它们没有命令。 / p>

以下是输出示例:

Admin - add, del, announce
Member - find

期望的输出:

Admin - add, del, announce
Member - find
Banned
OhterGroup1
OhterGroup2
OhterGroup3
OhterGroup4
OhterGroup5

如果您需要有关表格的更多信息,请在此处提供以下示例: MySQL query for multiple tables being secondary tables multiple items?

1 个答案:

答案 0 :(得分:2)

尝试使用LEFT JOIN代替groups_commands。请注意此查询中JOINcommands的移动方式。

SELECT g.name, IFNULL(GROUP_CONCAT(c.name),'') AS commands
FROM site_access b
    INNER JOIN groups g 
        ON b.group_id = g.id
    LEFT JOIN group_commands gc
        INNER JOIN commands c 
            ON gc.command_id = c.id
        ON g.id = gc.group_id
WHERE b.site_id = 1
GROUP BY g.name
ORDER BY g.status ASC