【发布时间】:2015-04-17 14:28:02
【问题描述】:
我正在尝试返回给定老师教授的所有初中/高中课程。使用两个表的内连接,正确显示 3 行。当我对第三个表进行第二次内连接时,它返回 6 行而不是 3 行。
如果不使用 cte、DISTINCT,如何显示 empid、中班和高中班的 3 行?此外,两个外部表都应该与主表进行连接。
IF OBJECT_ID('tempdb..#empl') IS NOT NULL DROP TABLE #empl
IF OBJECT_ID('tempdb..#middlecourses') IS NOT NULL DROP TABLE #middlecourses
IF OBJECT_ID('tempdb..#highcourses') IS NOT NULL DROP TABLE #highcourses
create table #empl
(
EmpId int,
Grade int
)
insert into #empl select 1, 5
create table #middlecourses
(
EmpId int,
Grade int,
Course varchar(20)
)
insert into #middlecourses select 1, 5, 'Science'
insert into #middlecourses select 1, 5, 'Math'
insert into #middlecourses select 1, 5, 'English'
create table #highcourses
(
EmpId int,
Grade int,
Course varchar(20)
)
insert into #highcourses select 1, 5, 'Calculus'
insert into #highcourses select 1, 5, 'Physics'
insert into #highcourses select 1, 5, 'CompSci'
select e.empid, e.grade, m.course as 'MiddleCourse'
from #empl e inner join #middlecourses m
on e.empid = m.empid
and e.grade = m.grade
select e.empid, e.grade, m.course as 'MiddleCourse', h.course as 'HighCourse'
from #empl e inner join #middlecourses m
on e.empid = m.empid
and e.grade = m.grade
inner join #highcourses h
on e.empid = h.empid
and e.grade = h.grade
drop table #empl
drop table #middlecourses
drop table #highcourses
【问题讨论】:
-
您的第二个查询返回 9 行,因为它正在将一组 1(您的
#empl)加入一组 3(#middlecourses),然后再加入一组 3(#highcourses)。你认为结果应该是什么?例如,科学应该如何与物理相匹配,而不是 CompSci? -
结果应该是3行;就像两个独立的内部连接加入一个结果集。
标签: sql sql-server tsql