2014-04-20 2 views
0

signup_limit에 의해 주어진 활동에 등록한 사람의 수를 선택하고 activity_info에 저장하고 가입 한 사람의 수를 signups에 저장하려면 . 아무도 가입하지 않았다면 가입 수를 0으로 계산하기를 원합니다. 그러나 제가 가지고있는 것처럼, 대신 행을 완전히 삭제합니다. 왼쪽 외부 조인을 사용하려고했지만 동일한 결과가 나타납니다. 어떤 제안?SQL 쿼리 왼쪽 가입 문제

SELECT info.code, info.signup_limit - COUNT(*) AS swag 
    FROM activity_info AS info 
     LEFT OUTER JOIN signups ON info.code = signups.activity_code, variables 
WHERE 
    info.code IN (
     SELECT schedule.code FROM schedule,variables WHERE schedule.date = variables.week 
    ) AND variables.week = signups.date 
GROUP BY signups.activity_code 

업데이트 : 의견 덕분에 해결되었습니다. 모두에게 감사드립니다!

+2

구문을 조인 구문 및 암시 적 (쉼표)에 가입 명시 적으로 혼합하지 마십시오. 사실, 쉼표 조인 구문을 전혀 사용하지 마십시오. 이 개념에 대한 수정은 – Strawberry

답변

0

나는 이것이 당신이 원하는 것을 추측 :

SELECT 
    AI.code, 
    (
     AI.signup_limit - 
     (
      SELECT 
       COUNT(*) 
      FROM 
       signups AS S 
      WHERE 
       S.activity_code = AI.code 
     ) 
    ) AS swag 
FROM 
    activity_info AS AI 
WHERE 
    info.code IN 
    (
     SELECT 
      schedule.code 
     FROM 
      schedule INNER JOIN variables ON schedule.date = variables.week 
    ) AND 
    variables.week = signups.date 
+0

입니다. 하위 쿼리에서 원래 쿼리의 열을 참조 할 수 있는지 여부를 알 수 없습니다. 감사합니다. – jwesly

+0

글쎄, 그럼 대답으로 표시해야합니다 ... –

0

SQL 변수 중간에 단어가 있습니다. 잘 유지하려면 제거 :

SELECT info.code, 
     info.signup_limit - count(*) AS swag 
FROM activity_info AS info 
LEFT OUTER JOIN signups ON info.code = signups.activity_code 
WHERE info.code IN 
    (SELECT schedule.code 
    FROM schedule 
    INNER JOIN variables ON schedule.date = variables.week) 
    AND variables.week = signups.date 
GROUP BY signups.activity_code