sql中的内连接返回相同的公开名称错误

时间:2014-09-21 22:00:09

标签: sql inner-join

我正在尝试为大学做作业,但我无法围绕内部联接,我尝试了谷歌搜索教程,但没有什么是坚持我。我基本上要做的是显示美国所有员工的姓名,薪水和部门名称。

我知道我必须显示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

1 个答案:

答案 0 :(得分:0)

正如评论中所述,您找到了解决问题的方法,但您的查询是将一些旧学校语法(强烈建议不使用它)与显式关节混合使用,而您几乎使用了别名但却错过了它。

以下是没有无用代码的相同查询,您可以在下面找到一些解释:

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,...

如果你有明确的联合(... JOIN TableName ON ...),你不需要在FROM子句中声明这些表(这个以逗号分隔的表示法已经过时,你需要避免它。) / p>

关于我的查询的最后一个细节是,我使用表格WHERE直接在关节条件下移动了Countries条件。这不是必需的,但通过这样做,条件在与此表的联合期间应用,而不是应用于查询的整个结果(在这种情况下,性能可能不会引人注意,但请记住这一点。)< / p>

希望这有助于您更好地了解自己所做的事情。