2014-12-18 2 views
0

의 [양]에 언급되지 않은 경우에만 레코드를 반환하는 내 UI에서 지금쿼리 내가 두 테이블이 이미 다른 기록

db structure

을, 나는 등록자 목록 및 콤보가 사용자가 그러나 잘 작동 투어, :

enter image description here

를 선택할 수있는 당신이 통지로 상자 필드에는 각 tourcapacity을 가지고, tour_att에 연결. 모든 투어 id s를 표시하는 대신, 나는 capacity에 지정된 숫자 이상으로 선택되지 않은 ID에만 옵션을 제한하고 싶습니다. 나는이 투어 테이블에 기록이있는 경우 예를 들어

는 : 1은 registrants 테이블 레코드 14 개 tour_att 분야에서 이미 존재하는 id 경우

| 1 | "10:30" | "This tour is at ten thirty" | 14 | 

를, 그것은에 옵션으로 표시 안 그 여행이 그 용량에 도달했기 때문에 선택하십시오.

내가 묻는 것을 수행하는 쿼리를 만드는 방법이 있습니까? 이것은 내가 지금까지 가지고있는,하지만 제대로 동작하지 않습니다 : (참고 :이 MSACCESS SQL, 그래서 일반 SQL보다 조금 다른 것처럼 보일 수있다) 당신이 누락

SELECT tours.id 
FROM tours INNER JOIN registrants ON tours.id = registrants.tour_att 
WHERE count(iif(registrants.tour_att=tours.id,1,0)) < tours.capacity 
ORDER BY tours.id; 

답변

1

group bycount()where 절에 속하지 않습니다.

그래도 난, 하위 쿼리와 함께이 일을 제안 :

SELECT tours.id 
FROM tours LEFT JOIN 
    (select registrants.tour_att, count(*) as numr 
     from registrants 
     group by registrants.tour_att 
    ) as r 
    ON tours.id = r.tour_att 
WHERE numr < tours.capacity OR numr IS NULL 
ORDER BY tours.id; 

이 코드는 투어로 registrants는 각 투어 등록자의 numer에 얻을 요약된다. 그러면 테이블에 다시 합쳐서 원하는 조건을 적용합니다.

+0

감사합니다. 코드에서 수행중인 작업을 설명하는 주석을 추가 하시겠습니까? 나는 여전히 SQL을 배우고 있으며 이것은 내가 배울 때 도움이 될 것입니다. – gnarlybracket

+0

지정된 'tours.id'에 대해 등록자가없는 경우를 제외하고는 잘 작동합니다. 그런 일이 생길 때, 옵션으로'id '를 반환하지 않습니다. 모든'registrants.tour_att' 필드가 비어 있다면, 나는 결과를 얻지 못합니다. 'Left Join '을 사용해 보았지만 작동하지 않았습니다. 어떤 충고? – gnarlybracket