13

设置:(1)员工表(employeeID、firstName、lastName)

(1)鞋表(shoeID、Employee_employeeID、shoeName、shoeColor、shoeBrand)

我想选择 Employee 表中的所有行,即使鞋表中没有匹配的 EmployeeID (Employee_EmployeeID) 无论如何都会显示整行。示例所需的输出:

 EmployeeID  | firstName    | lastName    | shoeName     |   shoeColor  | shoeBrand

 1            John           Smith         AirMax2          Red          Nike
 2            Ronald         Mcdonald      null             null         null
 3            James          Knight        null             null         null
 4            Cindy          Smith         Pump             Brown        Cole Haan

我已经尝试了很多不同的连接,我会得到每个员工的重复行。

4

3 回答 3

26

试试这个

   SELECT e.employeeId,e.firstName,e.lastName,s.ShoeName,s.ShoeColor,s.ShoeBrand 
   FROM    Employee e
   LEFT JOIN Shoe s
   ON e.employeeID = s.Employee_employeeID

在这里演示 SQLFIDDLE

于 2013-02-06T23:03:03.143 回答
9

你需要一个left outer join

select e.employeeid, e.firstname, e.lastname, s.shorname, s.shoecolor, s.shoebrand
from employee e left outer join
     shoe s
     on e.employeeid = s.employeeid
于 2013-02-06T22:56:21.133 回答
6

您将要使用LEFT JOIN

select e.employeeId,
  e.firstName,
  e.lastName,
  s.ShoeName,
  s.ShoeColor,
  s.ShoeBrand
from Employee e
left join shoe s
  on e.employeeID = s.Employee_employeeID

请参阅带有演示的 SQL Fiddle

即使表中没有匹配的行, ALEFT JOIN也会从表中返回匹配的行。employeeshoe

如果您在学习JOIN语法方面需要帮助,这里有一个很好的 joins 可视化解释

现在,如果您想要匹配两个表的所有行,那么您将使用INNER JOIN.

于 2013-02-06T22:56:47.163 回答