2012-01-20 70 views
0

我需要查找在多個狀態的任意中沒有關聯記錄的所有記錄。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 ...

回答

1

這是否適合你?與存在類似

SELECT * FROM projects 
WHERE id NOT IN (
    SELECT project_id 
    FROM people_projects 
    WHERE state IN ('interested', 'left', 'kicked') 
) 
+0

對不起,遲到回到你@Bort。我剛剛一直在玩這個,而且它似乎完美地工作,即使擴展到在連接表中包括附加標準。它也不那麼冗長。完善!非常感謝。 – Leo