我有这个 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/