MySQL Join表,如果未满足条件仍返回null

时间:2012-09-04 22:51:45

标签: mysql sql

我有这个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最好只是一个空字符串。

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,'')