SQL Join左连接或左外连接

时间:2015-01-23 15:17:11

标签: sql join left-join

我在SQL联接中有一个问题。我有表employee,employeeid作为主键,还有其他一些列为employee。还有另一个名为employeeaddress的表,其中可以有多个employeeid是外键。一名员工只需要解释一对多的关系,就可以拥有许多员工地址。

如果我想编写一个将获取以下列的查询

 employee.employeeid, employee.empname,
 employeeaddress.employeeaddressid, employeeaddress.addr1,
 employeeaddress.addr2

所以可能有一名员工没有员工地址。但无论如何,我想要获取可能有零个或多个地址的所有员工。

我是否需要申请left joinleft outer join?对于包含2名员工JohnMichael的表格,我希望得到以下结果,其中John有两个employeeaddresses employeeaddressid 2122以及{ {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

请帮忙。

2 个答案:

答案 0 :(得分:0)

根据您的描述,您似乎正在寻找如下查询。如果您还想要地址详细信息,则只需在外部查询中添加左连接。

此外,正如评论所述,LEFT JOINLEFT 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