我已经使用了很长一段时间的连接,但它始终是旧的语法。现在,我试图弄清楚如何使用JOIN语法进行基本的内连接,并且无法搞清楚它。
我们说我有3张桌子。
雇员:
EmployeeID EmployeeName DepartmentID
1 John Smith 2
2 Jane Doe 3
3 Mark Brown 1
部门:
DepartmentID DepartmentName AreaID
1 Sales 2
2 Marketing 1
3 Opeations 3
领域:
AreaID AreaName
1 Marketing
2 Sales
3 Opeartions
我需要获得所有员工姓名及其部门和领域的列表。
使用旧语法,我运行以下查询:
select e.EmployeeName, d.DepartmentName, a.AreaName
from employees e, departments d, areas a
where e.DepartmentID = d.DepartmentID
and d.AreaID = a.AreaID
使用新语法似乎我只能加入部门的员工,而不能加入同一查询区域的部门。或者我应该使用一个子选择?
答案 0 :(得分:0)
您可以尝试依次加入Employees
,Departments
和Areas
表格。我们在Stack Overflow上一丝不苟,因此我们选择了LEFT JOIN
而不是INNER JOIN
,因为它处理了员工可能没有被分配到某个部门的可能性,在这种情况下查询会显示NA
1}}作为值。
SELECT e.EmployeeName,
COALESCE(d.DepartmentName, 'NA'),
COALESCE(a.AreaName, 'NA')
FROM Employees e
LEFT JOIN
Departments d
ON e.DepartmentID = d.DepartmentID
LEFT JOIN Areas a
ON d.AreaID = a.AreaID
答案 1 :(得分:0)
我发现联接的this解释非常有用。 您的查询将如下所示:
SELECT e.EmployeeName, d.DepartmentName, a.AreaName
FROM employees e
INNER JOIN departments d on e.DepartmentID = d.DepartmentID
INNER JOIN areas a on d.AreaID = a.AreaID
答案 2 :(得分:0)
您编写的代码是 Inner Join 的替代代码。 您可以使用以下代码。 所以我所做的是使用DepartmentID将Employee表连接到Department表,并使用AreaID将Employee表连接到Areas表。
Select e.EmployeeName
, d.DepartmentName
, a.AreaName
from employees e
INNER JOIN departments d
, areas a
ON e.DepartmentID = d.DepartmentID
INNER JOIN areas a
ON d.AreaID = a.AreaID