簡體   English   中英

MySQL 5.5數據庫查詢幫助

[英]MySQL 5.5 Database Query Help

我在使用數據庫查詢時遇到了一些問題。

我有兩個表,學生(字段:FirstName,LastName,StdSSN)和教師(TFirstName,TLastName,TSSN),我已經為這個例子剝離了。 我需要執行一個查詢,它將返回除了教師本身的學生以外的所有學生。

我有查詢

SELECT student.FirstName, student.LastName
FROM `student`,`teachers`
WHERE student.StdSSN=teachers.TSSN

這給了我一份所有老師的清單,這些老師也是學生,但沒有向我提供非教師的學生名單,所以我嘗試改為:

SELECT student.FirstName, student.LastName
FROM `student`,`teachers`
WHERE student.StdSSN!=teachers.TSSN

這給了我一個包含許多重復值的學生的列表,所以我有點卡在這里。 如何更改內容以返回所有非教師學生的列表? 我正在考慮INNER / OUTER / SELF-JOIN並且正在玩那幾個小時,但事情變得復雜,我沒有做任何事情,所以我幾乎放棄了。

任何人都可以給我任何建議嗎? 我之前確實看過這個查詢而且非常簡單,但我在某處失敗了。

使用NOT IN

SELECT s.*
  FROM STUDENTS s
 WHERE s.stdssn NOT IN (SELECT t.tssn
                          FROM TEACHERS t)

使用NOT EXISTS

SELECT s.*
  FROM STUDENTS s
 WHERE NOT EXISTS (SELECT NULL
                     FROM TEACHERS t
                    WHERE t.tssn = s.stdssn)

使用LEFT JOIN / IS NULL

   SELECT s.*
     FROM STUDENTS s
LEFT JOIN TEACHERS t ON t.tssn = s.stdssn
    WHERE t.column IS NULL

我將“列”用於除了加入的教師之外的任何專欄。

比較:

如果比較的列可以為空(值可以為NULL),則NOT EXISTS是最佳選擇 否則,LEFT JOIN / IS NULL是最佳選擇(對於MySQL)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM