[英]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个雇员John
和Michael
的表的以下结果,其中John
具有两个employeeaddresses
,其employeeaddressid 21
和22
而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
以上结果按以下方式排列
employee.employeeid, employee.empname, employeeaddress.employeeaddressid, employeeaddress.addr1, employeeaddress.addr2
请帮忙。
根据您的描述,听起来您正在按以下方式查找查询。 如果还需要地址详细信息,则只需向外部查询添加左连接。
同样,正如所躲避的评论一样, 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.
只需LEFT JOIN
。
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.