我有这个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
最好只是一个空字符串。
答案 0 :(得分:4)
您希望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的任何行,将返回NULL
gperms.value。
如果您想要一个空字符串而不是NULL
,则可以使用IFNULL()
:
SELECT perms.permission_id, perms.long_title, perms.category, IFNULL(gperms.value,'')