2014-10-29 72 views
1

我有的是查询MYSQL如果条件不显示,如果再值为0

SELECT 
    mm.module_id, mm.module_name, 
    pm.permission_id, pm.permission_name, 
    CASE WHEN rp.permission_id is not null 
     THEN false ELSE true END AS status 
FROM permission_master AS pm 
LEFT OUTER JOIN role_permission AS rp 
    ON pm.permission_id = rp.permission_id AND rp.RoleID = 1 
LEFT OUTER JOIN module_master AS mm 
    ON pm.module_id = mm.module_id 
ORDER BY mm.module_id, pm.permission_id 

Here is the Fiddle

他的返回值和状态会根据给定的是0和1查询中的条件。

我需要的是它不应该返回coloumns即与状态0

我怎样才能做到这一点?

+2

having子句订单之前添加为
having status = 1如果你不想显示0状态,那么在order by子句前加上'having status = 1'。 – 2014-10-29 08:39:49

+1

真棒..它的作品很棒!请发布是一个答案接受:) – 2014-10-29 08:42:45

回答

1

所有你需要的条款

select 
mm.module_id, 
mm.module_name, 
pm.permission_id, 
pm.permission_name, 
case 
when rp.permission_id is not null then false 
else true 
end as status 
from permission_master as pm 
left outer join role_permission as rp on pm.permission_id = rp.permission_id and rp.RoleID = 1 
left outer join module_master as mm on pm.module_id = mm.module_id 
having status = 1 
order by mm.module_id, pm.permission_id 

http://sqlfiddle.com/#!2/7a960/2

1

您可以在查询中添加一个WHERE子句中像下面

select mm.module_id, mm.module_name, pm.permission_id, 
pm.permission_name, 
case when rp.permission_id is not null then false else true end as status 
from permission_master as pm 
left outer join role_permission as rp on pm.permission_id = rp.permission_id 
and rp.RoleID = 1 
left outer join module_master as mm on pm.module_id = mm.module_id 
where rp.permission_id is null 
order by mm.module_id, pm.permission_id