4

この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. perms一致する行があるかどうかに関係なく、クエリが where 基準に基づいてすべての行を返すようにしますgperms.group_id = 1

gperms.value一致する行がない場合は、理想的には空の文字列になりますgperms.group_id = 1

4

1 に答える 1

6

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

これはNULL、指定された条件で gperms に参加しない行の gperms.value に対して返されます。

の代わりに空の文字列が必要な場合は、NULL次を使用できますIFNULL()

SELECT perms.permission_id, perms.long_title, perms.category, IFNULL(gperms.value,'')
于 2012-09-04T23:03:25.823 に答える