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名冊上的表連接;他們都返回相同的東西。
返回測試瓊斯的兩個副本,但仍然不返回測試儀白色。此外,我需要r.status <>掛起和<>提交的項目,不等於。但是,這確實促使我嘗試其他方法。我正在編輯原始帖子以顯示要使用哪些SEEMS。 – EmmyS