所以我在尝试返回有两个不相等的条件的记录时遇到问题。
我有三个表:Person,Student和Instructor。我正在尝试返回既不是学生也不是教师的人员名单。
以下是表格(它们都填充了符合所有条件的值):
CREATE TABLE Person (
Name char (20),
ID char (9) not null,
Address char (30),
DOB date,
Primary key (ID)
);
CREATE TABLE Instructor (
InstructorID char (9) not null references Person (ID),
Rank char (12),
Salary integer,
PRIMARY KEY (InstructorID)
);
CREATE TABLE Student (
StudentID char (9) not null REFERENCES Person (ID),
Classification char (10),
GPA DOUBLE,
MentorID char (9) REFERENCES Instructor (InstructorID),
CreditHours integer,
PRIMARY KEY (StudentID)
);
这是我的回答/查询:
SELECT Person.ID, Person.Name, Person.DOB
FROM Person
RIGHT JOIN Student ON Person.ID = Student.StudentID
RIGHT JOIN Instructor ON Person.ID = Instructor.InstructorID
WHERE NOT Person.ID = Student.StudentID AND Person.ID =
Instructor.InstructorID;
我在连接上搞砸了什么?我没有收到任何错误,但查询也没有返回任何内容。我尝试了所有连接(左,右,全)无济于事。
非常感谢任何帮助。
答案 0 :(得分:0)
您可以使用NOT IN来确定记录是否不在这两个表中
SELECT id,
name,
dob
FROM Person
WHERE id NOT IN (SELECT studentid
FROM student)
AND id NOT IN (SELECT instructorid
FROM instructor);
答案 1 :(得分:0)
你非常接近。首先,使用LEFT JOIN
,以便将所有内容保存在第一个表中。其次,使用与NULL
的比较来查看是否存在匹配:
SELECT p.ID, p.Name, p.DOB
FROM Person p LEFT JOIN
Student s
ON p.ID = s.StudentID LEFT JOIN
Instructor i
ON p.ID = i.InstructorID
WHERE s.StudentID IS NULL AND i.InstructorID IS NULL;