2010-11-21 2 views
0

0 나는 레일 3 응용 프로그램에서 다음과 같은 모델을 선택 요구 사항이 있습니다는 SQL 집계 계수 =

class Item < AR
has_many :holdings

class Holding < AR
belongs_to :item

유지 모델은 '활성'부울 값이 있습니다.

0 개의 '활성'보유 수 (관련 보유 수의 개수가있을 수 있음)가있는 각 항목을 찾고 싶습니다. 꽤 많은 조합을 시도했습니다.

SELECT * from items JOIN
(SELECT holdings.item_id, count(ifnull(item_id,0)) AS hcount FROM holdings
WHERE holdings.active = "t"
GROUP BY holdings.item_id
HAVING hcount = 0)
ON items.id = holdings.item_id

하지만 이것은 단지 0보다 큰

사람이 올바른 방향으로 날 포인트 카운트를 반환합니다?

답변

1

의미가있을 때 카운트를 사용하지 마십시오!

존재하지 않는 절을 사용하십시오.

SELECT * from items i 
where not exists(select holdings.item_id 
      from holdings 
      where holdings.active = 't' 
       and holdings.item_id = i.item_id) 

영어로 작성된이 성명서에는 홀딩에 일치하는 행이없는 항목의 모든 행이 나와 있습니다.

+0

감사합니다. 훨씬 더 의미가 있습니다! – scaney