2017-09-14 152 views
1

所以我有一个问题,试图返回具有两个不相等的条件的记录。SQL查询不返回任何数据

我有三个表格: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

您可以使用NOT IN,以确定是否记录是不是在这两个表

SELECT id, 
     name, 
     dob 
    FROM Person 
WHERE id NOT IN (SELECT studentid 
        FROM student) 
    AND id NOT IN (SELECT instructorid 
        FROM instructor); 
+0

嗯.....它仍然没有拉起什么... – ESM

+0

它不是关于是否有显示出来的数据,它是关于如果预期数据没有出现。尝试首先确定您希望显示的数据/记录 –

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;