2014-09-21 54 views
0

我想为大学做一个任务,但我无法将我的头围绕内部连接,我尝试了谷歌搜索教程,但没有什么是坚持我。我基本上必须做的是显示美国所有员工的姓名,薪金和部门名称。内部连接在SQL返回相同的暴露名称错误

我知道我必须显示departments.department_name,employees.First/Last_name,employees.salary。 但我不知道怎么写呢

e.department_id = d.department_id 
d.location_id = l.location_id 
l.country_id = c.country.id 
where c.country.id = 'united states of america' 

某种方式找到的部门名称和输出这点。

这里是我的表http://puu.sh/bIxzX/591c708f27.png

+3

那么,我不能提供一个答案,因为我会为你做你的功课。因此,请允许我将它分解一点:您想使用内部联接来查找Employees和Locations(它们的交集),然后您需要一个外部联接来将Department连接到结果以便能够传达部门名称。试着用两个步骤思考它,就像那样。获得第一部分运行,然后添加第二部分。 – 2014-09-21 22:07:21

+0

@GreyDog好吧,生病报告结果。并感谢不只是回答,我想学习如何为未来做。 – Kevin 2014-09-21 22:11:28

+1

祝你好运。盯着这一个小时。这是数据库黄金。 http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg – 2014-09-21 22:17:17

回答

0

张贴在评论,你找到了你的问题的解决方案,但你的查询混合一些有明确jointures老同学语法(强烈建议不要使用它),你几乎用别名,但错过了它。

这里是没有无用的代码相同的查询,你会发现下面的一些解释:

SELECT E.FIRST_NAME 
    ,E.LAST_NAME 
    ,E.SALARY 
    ,D.DEPARTMENT_NAME 
    ,L.Street_Address 
FROM Employees E 
INNER JOIN Departments D ON D.DEPARTMENT_ID = E.DEPARTMENT_ID 
INNER JOIN Locations L ON L.Location_id = D.LOCATION_ID 
INNER JOIN Countries C ON C.Country_ID = L.Country_ID 
         AND C.Country_Name = 'united states of america' 

在此查询中,我使用别名,以简化的可读性。表Employees有别名E,表Departments有别名D,...

如果你有明确的jointures(... JOIN TableName ON ...),你不需要在你FROM子句声明这些表(这个逗号分隔符号是过时,你需要避免它)。

关于我的查询的最后一个细节是,我将WHERE条件直接移动到表Countries的合作条件中。这不是必需的,但通过这样做,条件在与此表关联期间应用,而不是应用于查询的整个结果(在这种情况下,性能可能不明显,但请牢记)。

希望这会帮助你更好地理解你所做的。