我们在MySQL数据库中有三个表-
公司有员工。员工有地址。[请注意,他们可以有多个地址]
请看下图,了解结构的一般概念
这里有两个条件-
1.获取所有在地址表中列出其雇员至少一个地址的公司。
示例查询结果应包含以下公司-
微软,谷歌,IBM
2.获取“地址”表中列出其员工没有地址的所有公司。
示例查询结果应包含以下公司-
雅虎
我们目前已编写了此查询,该查询似乎适用于此特定条件-
SELECT
company_id,
companies.company_name,
FROM companies
LEFT OUTER JOIN employees ON employees.company_id = companies.company_id
LEFT OUTER JOIN addresses ON address.employee_id = employees.employee_id AND address_id IS NOT NULL
WHERE address_id IS NULL GROUP BY companies.company_id;
有没有一种方法可以通过对数据库的单个查询来获取这些结果,而无需使用存储过程?它应根据公司员工是否列出了地址,在结果集中添加一列(0或1)。
1.获取所有在地址表中列出其雇员至少一个地址的公司。
2.获取“地址”表中列出其员工没有地址的所有公司。
有没有一种方法可以通过对数据库的单个查询来获取这些结果,而无需使用存储过程?
试试这个:
SELECT * FROM companies
更新的答案:
Select c.[company_id],c.[company_name], CASE WHEN count(a.address_id)>0 THEN 1 ELSE 0 END as [flag] from Company c
left join Employee e on e.[company_id] = c.[company_id]
left join Address a on a.[employee_id] = e.[employee_id]
group by c.[ID],c.[company_name]
给我结果:
ID NAME FLAG
2 Google 1
3 IBM 1
1 Microsoft 1
4 Yahoo 0
sqlfiddle:http ://sqlfiddle.com/#!6/4163a/3
更新:抱歉,sqlfiddle for MSSQL。这是mysql:http ://sqlfiddle.com/#!2/18d09/1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句