尝试进行三表连接显示所有列

时间:2016-02-20 02:36:27

标签: sql inner-join

我正在尝试进行三表连接以显示所有列。只有两个表有一个共同的键。下面是我已经拥有的表的代码:

CREATE TABLE Faculty (
FacultyID int,
FirstName varchar(30),
LastName varchar(30),
EMail varchar(60),
BirthDate DATE,
Numbr_Courses int,
PRIMARY KEY (FacultyID)
);

CREATE TABLE Courses(
CourseID int,
CourseDisc varchar(4),
CourseNum varchar(4),
NumbrCred varchar(1),
FirstYrOffered int,
CourseTitle varchar(75),
PRIMARY KEY (CourseID)
);

CREATE TABLE Faculty_Courses(
InstanceID int,
FacultyID int,
CourseDisc varchar(4),
CourseNum varchar(4),
CourseTitle varchar(75),
PRIMARY KEY (InstanceID),
FOREIGN KEY (FacultyID) REFERENCES Faculty(FacultyID)
);

具有相同键的两个表是Faculty和Faculty_Course。我尝试了一个只给我一个错误的代码。我想我真的很难理解如何为连接表做正确的代码。我的尝试代码如下:

SELECT Faculty.*, Faculty_Courses.*
    FROM  Faculty INNER JOIN Courses
        ON Faculty.FacultyID=Faculty_Courses.FacultyID

这给了我以下错误:

ERROR 1066(42000):不是唯一的表/别名:'Faculty'

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

我很惊讶您的factory_courses表格没有引用courses

无论哪种方式,对于您当前的查询,您选择的是facultycourses,但是别名faculty_courses - 您无法做到这一点。这是您当前的查询应该是这样的:

select *
from faculty f 
   join faculty_courses fc on f.facultyid = fc.facultyid

join第3个表,如果courseid表中有faculty_courses,可能是这样的:

select *
from faculty f 
   join faculty_courses fc on f.facultyid = fc.facultyid
   join courses c on fc.courseid = c.courseid

答案 1 :(得分:1)

您正在对两个表进行连接,而不实际链接这些表中的两列;使用FacultyCourses中的列加入FacultyFaculty_Courses。 由于没有列具有将Courses与任何其他表相关联的唯一值,因此您无法使用Courses执行连接。 因此,您应该加入FacultyFaculty_courses

SELECT Faculty.*, Faculty_Courses.*
    FROM  Faculty INNER JOIN Faculty_Courses
        ON Faculty.FacultyID=Faculty_Courses.FacultyID

答案 2 :(得分:1)

我会更改您的Faculty_Courses表格:

CREATE TABLE Faculty_Courses(
  InstanceID int,
  FacultyID int,
  CourseID int,
  PRIMARY KEY (InstanceID),
  FOREIGN KEY (FacultyID) REFERENCES Faculty(FacultyID),
  FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);

然后将所有三个表连接在一起:

SELECT F.*, FC.*, C.*
FROM  Faculty F
INNER JOIN Faculty_Courses FC ON F.FacultyID = FC.FacultyID
INNER JOIN Courses C ON C.CourseID = FC.CourseID

您可能只需要F(教师)和C(课程)中的某些列,并且大多可以忽略FC列,因为它们仅用于F之间的映射{1}}和C