2011-06-21 108 views
-1

我有以下布局的数据库:SQL连接查询多个表

employees (person_name, street, city) 
works (person_name, company_name, salary) 
companies (company_name, city) 
manages (person_name, manager_name) 

我需要拿出一个查询,让我找到谁是赚取更多然后他们的经理的所有员工。我知道这涉及员工,工作和管理表格之间的一些非常强烈的联系,而我无法得到一个能够工作的人。有人能帮助我,并解释如何获得解决方案?

+0

看起来像一个作业问题 – Balanivash

+1

http://en.wikipedia.org/wiki/Join_(SQL) – Ruben

回答

1
SELECT w.person_name 
FROM works w 
    INNER JOIN manages m 
     ON m.person_name = w.person_name 
      INNER JOIN works wManager 
       ON wManager.person_name = m.manager_name 
WHERE w.salary > wManager.salary 
2

首先,名称不是一个很好的关键。

答案的关键是您可以多次连接到一个表格(请记住别名表以便您可以区分您想要引用的表格)。

在没有为您编写查询的情况下,这意味着您应该选择员工,通过Works和Companies加入(这会为您提供员工薪水)。这应该通过Manages加入,然后加入员工以获取您的经理详细信息。这个版本的员工可以第二次加入Works,以获得经理薪水。然后,只需比较WHERE子句中的薪水即可。