gpt4 book ai didi

mysql - CONCAT 只返回不为空的行

转载 作者:行者123 更新时间:2023-11-29 07:07:27 25 4
gpt4 key购买 nike

我在几个主题中搜索了如何解决这个问题,我遇到了一个使用 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,目前发生的是它确实打印了这 2 个组,但忽略了所有其余组,因为它们没有命令。

这是一个输出示例:

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?

最佳答案

尝试对 groups_commands 使用 LEFT JOIN。请注意 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

关于mysql - CONCAT 只返回不为空的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6473877/

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