我正在尝试进行三表连接以显示所有列。只有两个表有一个共同的键。下面是我已经拥有的表的代码:
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'
任何帮助将不胜感激。
答案 0 :(得分:1)
我很惊讶您的factory_courses
表格没有引用courses
。
无论哪种方式,对于您当前的查询,您选择的是faculty
和courses
,但是别名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)
您正在对两个表进行连接,而不实际链接这些表中的两列;使用Faculty
和Courses
中的列加入Faculty
和Faculty_Courses
。
由于没有列具有将Courses
与任何其他表相关联的唯一值,因此您无法使用Courses
执行连接。
因此,您应该加入Faculty
和Faculty_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