【问题标题】:SQL joins with left outer join左外连接的 SQL 连接
【发布时间】:2017-04-27 19:17:27
【问题描述】:

我正在尝试从一个表中获取一个额外的列,该表对左外连接中的一个表进行连接查询,

PFB 我的桌子,

Create table tblEmployee(
ID int identity primary key,
FirstName nvarchar(50),
LastName nvarchar(50),
Gender nvarchar(50),
Salary int
)

Create table tblCourses(
CourseId int identity primary key,
CourseName nvarchar(50) not null
)


Create table tblEmpCourses(
EmpCourseSlNo int identity primary key,
EmpID int foreign key references tblEmployee(ID),
CourseID int foreign key references tblCourses(CourseId)
)

PFB 插入语句,

insert into tblEmployee values ('FName1', 'LName1', 'Male', '10000')
insert into tblEmployee values ('FName2', 'LName2', 'Male', '15000')
insert into tblEmployee values ('FName3', 'LName3', 'Female', '30000')
insert into tblEmployee values ('FName4', 'LName4', 'Male', '50000')
insert into tblEmployee values ('FName5', 'LName5', 'Male', '60000')
insert into tblEmployee values ('FName6', 'LName6', 'Female', '0000')
insert into tblEmployee values ('FName7', 'LName7', 'Male', '10000')
insert into tblEmployee values ('FName8', 'LName8', 'Male', '30000')

insert into tblCourses values ('Asp.net')
insert into tblCourses values ('C#')
insert into tblCourses values ('WebAPI')
insert into tblCourses values ('SQL')
insert into tblCourses values ('WCF')
insert into tblCourses values ('JS')
insert into tblCourses values ('CSS')
insert into tblCourses values ('JAVA')

insert into tblEmpCourses values (1, 1)
insert into tblEmpCourses values (1, 2)
insert into tblEmpCourses values (1, 3)
insert into tblEmpCourses values (1, 4)

如何编写查询以获取所有员工名字的数据,他订阅了任何课程或未订阅任何课程以及 courseID 和 courseName

尝试使用以下查询,但无法在 select 语句中添加 CourseName,如何在此处再添加一个连接 b/w tblEmpCourses 表和带有 left_outer_join 的 tblCourses 以获取 CourseName

所以我希望数据为

名字 CourseID 课程名称

  select FirstName, CourseID 
  from   tblEmployee 
  left outer join tblEmpCourses 
  on     tblEmployee.ID = tblEmpCourses.EmpID;

根据以下快照预期结果,

【问题讨论】:

  • 你能添加你想要的结果吗?

标签: sql-server tsql


【解决方案1】:
SELECT
 e.FirstName,
 c.CourseID,
 c.CourseName
FROM tblEmployee e
LEFT JOIN tblEmpCourses ec ON e.ID =ec.EmpID
LEFT JOIN tblCourses  c ON c.CourseID = ec.CourseID

类似的东西?

【讨论】:

    【解决方案2】:
    select FirstName, CourseID, CourseName
    from   tblEmployee 
    left outer join tblEmpCourses 
    on     tblEmployee.ID = tblEmpCourses.EmpID
    left outer join tblCourses
    on tblEmpCourses.CourseId = tblCourses.CourseId
    

    【讨论】:

    • 左外连接和左连接是一样的
    • @Fabio 感谢您的回复。这是我所期待的解决方案。
    【解决方案3】:
    --Inner join for matching records
     SELECT FirstName, C.CourseID ,tC.CourseName
      FROM   tblEmployee E
      INNER JOIN 
        tblEmpCourses C 
          ON     E.ID = C.EmpID
      INNER join tblCourses tc
        ON tc.CourseId=C.CourseID   
    

    输出

    FirstName   CourseID    CourseName
    FName1      1          Asp.net
    FName1      2          C#
    FName1      3          WebAPI
    FName1      4          SQL
    

    【讨论】:

    • @Manju 要获得完全匹配的记录,请使用 Inner join
    猜你喜欢
    • 2016-10-02
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    相关资源
    最近更新 更多