2011-11-07 23 views
0

UPDATE下面,我嘗試這樣做:如何從表A記錄不具有等效於表B中有一定地位?基於由@BrianFisher答案

SELECT np.id AS people_id, np.first_name, np.last_name, ur.rid 
FROM new_people np 
LEFT JOIN institute.users_roles ur ON np.institute_uid = ur.uid 
AND ur.rid =8 
LEFT JOIN roster r ON np.id = r.people_id 
WHERE np.company_id =1 
AND np.active =1 
AND (r.roster_id IS NULL OR NOT (r.status = 'pending' OR r.status = 'submitted')) 
ORDER BY np.last_name, np.first_name 

似乎工作;它確實會返回我想要返回的內容。任何人都可以告訴我,如果有一個它不應該工作的原因,或者可能不適用於更大的數據集? (即它只是巧合,它的工作了?它是不好的做法,內部的,喜歡築巢報表?)

==================== ===============

SELECT np.id AS people_id, np.first_name, np.last_name, ur.rid 
FROM new_people np 
LEFT JOIN institute.users_roles ur ON np.institute_uid = ur.uid 
AND ur.rid =8 

LEFT JOIN roster r ON np.id = r.people_id 
WHERE np.company_id =1 
AND np.active =1 
AND NOT (
r.status = 'pending' 
OR r.status = 'submitted' 
) 
ORDER BY np.last_name, np.first_name 

編輯 - 我也試着像這樣的查詢結果相同:

SELECT np.id AS people_id, np.first_name, np.last_name, ur.rid 
FROM new_people np 
LEFT JOIN institute.users_roles ur ON np.institute_uid = ur.uid 
AND ur.rid =8 

LEFT JOIN roster r ON np.id = r.people_id AND NOT (r.status = 'pending' 
OR r.status = 'submitted') 

WHERE np.company_id =1 
AND np.active =1 

ORDER BY np.last_name, np.first_name 

new_people: 
id  first_name  last_name institute_uid company_id 
==  ==========  ========= ============= ========== 
1  Tester   Jones  100    1 
2  Tester   Smith  200    1 
3  Tester   Brown  300    1 
4  Tester   White  400    1 

users_roles: 
uid rid 
=== === 
100 8 
200 8 
300 8 
400 8 

roster: 
roster_id people_id company_id status 
========= ========= ========== ====== 
8   1   1   completed 
15   2   1   submitted 
23   3   1   pending 

我想要什麼該查詢返回是測試瓊斯(people_id 1),因爲他的名冊記錄不出臺或提交,計白,因爲他沒有一個記錄名冊記錄。查詢原樣返回Tester Jones,但不包含Tester White。我如何得到它包括從new_people表的人特別是因爲他們沒有在花名冊表中的記錄?我試過JOIN,LEFT JOIN,RIGHT JOIN,INNER名冊上的表連接;他們都返回相同的東西。

回答

0

嘗試

SELECT np.id AS people_id, np.first_name, np.last_name, ur.rid 
FROM new_people np 
LEFT JOIN institute.users_roles ur ON np.institute_uid = ur.uid 
AND ur.rid =8 

LEFT JOIN roster r ON np.id = r.people_id 

WHERE np.company_id =1 
AND np.active =1 
AND (r.roster_id IS NULL OR r.status = 'pending' OR r.status = 'submitted') 

ORDER BY np.last_name, np.first_name 
+0

返回測試瓊斯的兩個副本,但仍然不返回測試儀白色。此外,我需要r.status <>掛起和<>提交的項目,不等於。但是,這確實促使我嘗試其他方法。我正在編輯原始帖子以顯示要使用哪些SEEMS。 – EmmyS

相關問題