繁体   English   中英

SQL联接左联接或左外部联接

[英]SQL Join left join or left outer join

我在SQL Join中有一个问题。 我有以employeeid作为主键的表employee,以及employee的其他一些列。 还有另一个表称为employeeaddress,其中可以有多个employeeid是一个外键。 一位员工可以拥有许多员工地址,仅用于解释一对多关系。

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

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

因此,可能有一个没有雇员地址的雇员。 但是无论如何,我想获取所有可能有零个或多个地址的员工。

我需要应用left join还是left outer join 我想要具有2个雇员JohnMichael的表的以下结果,其中John具有两个employeeaddresses ,其employeeaddressid 2122Michael没有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

以上结果按以下方式排列

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

请帮忙。

根据您的描述,听起来您正在按以下方式查找查询。 如果还需要地址详细信息,则只需向外部查询添加左连接。

同样,正如所躲避的评论一样, 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.

只需LEFT JOIN

SQL小提琴示例

SELECT  e.employeeID ,
        e.empName ,
        ea.employeeAddressID ,
        ea.addr1 ,
        ea.addr2
FROM    Employee e
        LEFT JOIN EmployeeAddress ea ON ea.employeeID = e.employeeID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM