MySQL - 如何加入这些表

时间:2015-11-18 10:15:55

标签: mysql join

我有以下表格:

公司

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;

提前致谢。

1 个答案:

答案 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;