我有以下表格:
公司
id | name | domain
1 | sample1 | one.sample.lan
2 | sample2 | two.sample.lan
权限
id | moduleid | permid
5 | 12 | 2
如果模块的权限设置为权限表中的公司,则将设置模块的ID(此处为12)和公司的ID(此处为2),权限的正常ID将自动递增。如果将删除权限,则将从权限中删除整行。
我想从我的选择中获得以下内容:
company.name | company.domain | selected
我想得到所有公司,无论是否设置都无关紧要。如果选择了这些信息(在表格权限中)为1或0。
类似的东西:
SELECT company.name, company.domain
FROM company LEFT JOIN permissions ON (company.id = permissions.permid)
WHERE permissions.moduleid = 12;
提前致谢。
答案 0 :(得分:2)
使用distinct来获取每个公司一次,并使用if或case结构来确定它是否存在于权限表中:
SELECT DISTINCT company.name, company.domain, if(permissions.permid is null, 0, 1) as selected
FROM company LEFT JOIN permissions ON (company.id = permissions.permid)
WHERE permissions.moduleid = 12;
更新:如果您想检查哪些公司可以访问特定模块,请将where标准移动到连接条件中:
SELECT DISTINCT company.name, company.domain, if(permissions.permid is null, 0, 1) as selected
FROM company LEFT JOIN permissions ON (company.id = permissions.permid) and permissions.moduleid = 12;