基于多个表的SELECT查询

阿比耶特·帕特罗(Abijeet Patro)

我们在MySQL数据库中有三个表-

  1. 公司
  2. 员工
  3. 地址

公司有员工。员工有地址。[请注意,他们可以有多个地址]

请看下图,了解结构的一般概念

数据库结构

这里有两个条件-

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)。

BaBL86

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章