我需要查找在多個狀態的任意中沒有關聯記錄的所有記錄。SQL/Rails查找零關聯記錄處於給定狀態的記錄
I.E.:
項目有一定數量的關聯人。
每個人都可能處於與項目有關的許多不同狀態之一(感興趣,參與,離開,踢,抱怨,完成等)。
因此,要找到'沒有人在工作'的項目列表,我需要檢查所有與項目相關的人員,並確保他們都處於某種狀態。注:這意味着我真的只對People-Project連接表感興趣。
這裏就是我必須(根據SQL: Select records where ALL joined records satisfy some condition):
SELECT * FROM projects
WHERE NOT EXISTS (
SELECT NULL FROM people_projects AS pp
WHERE pp.project_id = projects.id AND (
pp.state = 'interested' OR
pp.state = 'left' OR
pp.state = 'kicked'
)
這似乎是工作在一定程度上,即它返回的東西,並不能代表一切。但是,返回的一些記錄肯定與people_projects
條目有關,這些條目處於不允許的狀態之一,並且至少有一條記錄我發現沒有people_projects
的任何狀態,即不是返回的狀態。
任何意見非常讚賞。
N.B.這實際上是通過Rails 3項目中的ActiveRecord構建的,但實際上我只是從頭開始編寫WHERE
子句。完全不同的方法歡迎!現在,我正在做這個過濾後查詢Ruby ...
對不起,遲到回到你@Bort。我剛剛一直在玩這個,而且它似乎完美地工作,即使擴展到在連接表中包括附加標準。它也不那麼冗長。完善!非常感謝。 – Leo