2017-09-14 168 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;