我在SQL联接中有一个问题。我有表employee,employeeid作为主键,还有其他一些列为employee。还有另一个名为employeeaddress的表,其中可以有多个employeeid是外键。一名员工只需要解释一对多的关系,就可以拥有许多员工地址。
如果我想编写一个将获取以下列的查询
employee.employeeid, employee.empname,
employeeaddress.employeeaddressid, employeeaddress.addr1,
employeeaddress.addr2
所以可能有一名员工没有员工地址。但无论如何,我想要获取可能有零个或多个地址的所有员工。
我是否需要申请left join
或left outer join
?对于包含2名员工John
和Michael
的表格,我希望得到以下结果,其中John
有两个employeeaddresses
employeeaddressid 21
和22
以及{ {1}}没有Michael
employeeaddress
上述结果按以下方式排列
1, John, 21, addr1 for John, addr2 for John
1, John, 22, another addr1 for John, another addr2 for John
2, Michael, NULL , NULL , NULL
请帮忙。
答案 0 :(得分:0)
根据您的描述,您似乎正在寻找如下查询。如果您还想要地址详细信息,则只需在外部查询中添加左连接。
此外,正如评论所述,LEFT JOIN
是LEFT OUTER JOIN
的简写,它们会产生相同的结果。
SELECT *
FROM employee
inner join
(
SELECT
employeeid,
count(*) as addresscount
FROM employee
left join employeeaddress ON employeeaddress.employeeaddressid = employee.employeeaddressid
group by employeeid
) counts on counts.employeeid = employee.employeeid
WHERE counts.addresscount = 0 -- Or 1, or 5 or > 1, etc.
答案 1 :(得分:0)
LEFT JOIN
应该就是您所需要的一切。
<强> SQL Fiddle Example 强>
SELECT e.employeeID ,
e.empName ,
ea.employeeAddressID ,
ea.addr1 ,
ea.addr2
FROM Employee e
LEFT JOIN EmployeeAddress ea ON ea.employeeID = e.employeeID