选择所有数据包括另一个表,即使为null

Jor*_*dan 11 mysql sql

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

(1)鞋桌(shoeID,Employee_employeeID,shoeName,shoeColor,shoeBrand)

我想选择在雇员表的所有行,即使是在鞋表显示不匹配雇员(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
Run Code Online (Sandbox Code Playgroud)

我尝试了很多不同的连接,我会为每个Employee获取重复的行.

ech*_*_Me 21

试试这个

   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
Run Code Online (Sandbox Code Playgroud)

DEMO SQLFIDDLE HERE


Gor*_*off 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
Run Code Online (Sandbox Code Playgroud)


Tar*_*ryn 5

您将要使用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
Run Code Online (Sandbox Code Playgroud)

参见带有演示的SQL Fiddle

即使表中没有匹配的行,A LEFT JOIN也会从employee表中返回匹配的行shoe

如果您需要学习JOIN语法的帮助,这里是join的直观说明

现在,如果您希望所有与两个表都匹配的行,则可以使用INNER JOIN