2012-06-19 32 views
0

我有一個可以申請實習的實習生申請。 我們有一個可以自動限定實習生的腳本。 我想取得所有沒有資格參加實習的實習生。加入的查詢行與查詢不匹配

數據庫是這樣的:

Intern (Id,...) 
Application (Id, status, intern_id, internship_id,...) 
Internship (Id,...) 

因爲,我們已經「應用」,「合格」,「目前」和「做」 基本上,我需要做實習生的加入請求的狀態誰沒有'合格'狀態的應用程序,但我的SQL技能是非常基本的。

編輯

我忘了提,有可能是一個實習生多個應用程序,實習生只能資格一個實習,但他仍然可以申請到另一個,所以這是不行的

SELECT * 
FROM Intern i 
INNER JOIN Application a ON i.Id = a.intern_id 
WHERE a.status <> 'qualified' 
+0

你能顯示你試過的查詢嗎? – Taryn

回答

1

中包括一個LEFT JOIN的狀態,過濾器,像這樣不匹配:

SELECT .... 
FROM Intern i 
     LEFT JOIN 
       Application a 
       ON i.Id = a.intern_id 
       AND a.status = 'qualified' 
WHERE a.Id IS NULL 

顯然,請替換列表的列!

+0

這是優雅的,難以忍受的,加上它就像一個魅力。謝謝:-) – Julien

+0

不客氣。 –

1
SELECT * 
    FROM Intern i 
WHERE NOT EXISTS 
    (SELECT * 
     FROM Intern j 
      , Application a 
     WHERE j.id = a.intern_id 
     AND i.id = j.id 
     AND a.status = 'qualified') 
+0

我猜它可行,但David M的解決方案對我來說感覺有點乾淨。謝謝:-) – Julien

0
SELECT * FROM Intern 
WHERE Id IN (SELECT Intern_id FROM Application WHERE status <> 'qualified'); 
0

此查詢應該返回你在找什麼:

SELECT * 
FROM Intern i 
INNER JOIN Application a ON i.Id = a.intern_id 
WHERE a.status <> 'qualified' 

顯然,可以更換*只有田野上你所期待的。如果你正在尋找那些沒有資格的實習生,我不認爲你需要實習生表。這確實假設每個實習生只有一個應用程序...如果不是這種情況,您可以使用此查詢:

SELECT * 
FROM Intern i 
WHERE i.Id IN 
(
SELECT intern_id 
FROM Application a 
WHERE a.status <> 'qualified' 
)