我有这个 MySQL 查询

SELECT perms.permission_id, perms.long_title, perms.category, gperms.value FROM
acl_permissions AS perms JOIN acl_group_permissions AS gperms ON
(perms.permission_id = gperms.permission_id AND gperms.group_id = 1) WHERE
perms.type IN ('adm', 'cs') AND perms.simple_title NOT IN ('adm_', 'cs_')
ORDER BY perms.long_title

基本上导致问题的位在 ON 中。我希望查询根据 where 条件从 perms 返回所有行,而不管是否有匹配 gperms.group_id = 1 的行。

如果没有与 gperms.value 匹配的行, gperms.group_id = 1 理想情况下只是一个空字符串。

最佳答案

您想要 LEFT OUTER JOIN(或简称 LEFT JOIN)gperms 而不是直接连接

SELECT perms.permission_id, perms.long_title, perms.category, gperms.value
FROM acl_permissions AS perms
LEFT JOIN acl_group_permissions AS gperms
    ON (perms.permission_id = gperms.permission_id AND gperms.group_id = 1)
WHERE perms.type IN ('adm', 'cs')
    AND perms.simple_title NOT IN ('adm_', 'cs_')
ORDER BY perms.long_title

对于在给定条件下未加入 gperms 的任何行,它将返回 gperms.value 的 NULL

如果你想要一个空字符串而不是 NULL 你可以使用 IFNULL() :
SELECT perms.permission_id, perms.long_title, perms.category, IFNULL(gperms.value,'')

关于MySQL 连接表,如果不满足条件仍返回 null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12272423/

10-10 08:45