2012-06-19 9 views
0

저는 수년 동안 간단한 MySQL 명령을 사용해 왔으며 더 복잡한 명령을 사용하고자했습니다. 이전 코드를 다시 작성하는 작업을 수행했지만 여기서 무슨 일이 일어나는지 알 수 없습니다.WHERE가 지정 될 때까지 MySQL 결과가 없습니다.

두 개의 테이블을 하나의 reults에 병합하려고합니다. 두 번째 테이블은 "개수"만을 제공합니다. 내가 원하는 무엇

TABLE customers: 
customerID, name, boxID 
TABLE codes: 
boxID, code, retrieved 

정확히 내가 고객으로부터 SELECT *에서 무엇을 얻을 것입니다,하지만 난 boxID이 동일한 경우 코드 테이블의 모든 코드에 대한 수를()가 여분의 열을합니다.

이것은 현재 검색어입니다.

SELECT customers.*, count(codes.code) as codesused 
FROM customers 
INNER JOIN codes 
ON customers.boxID = codes.boxID 
WHERE codes.retrieved = 1 

"where customers.customerID = 'x'"를 추가 할 때까지 NULL이됩니다. 왜 위의 코드에서 원하는 것을 얻을 수 없는지 설명 할 수 있습니까?

+2

데 사용해야합니다 그래서 당신은 당신이 우리를 위해 여기에 링크 할 수 있습니다 http://sqlfiddle.com/에서 샘플 시나리오를 만들 수 있습니다에 의해 그룹과 where 절을 사용할 수 없습니다 . – biziclop

답변

5

집계 함수를 다른 필드와 결합 할 때 group by 절을 사용해야합니다. 이렇게 쿼리를 작성할 수 있습니다.

SELECT customerID, name, boxID, count(codes.code) as codesused 
FROM customers 
INNER JOIN codes ON customers.boxID = codes.boxID 
GROUP BY customerID, name, boxID, codesused 
HAVING codes.retrieved = 1 

그리고 당신은

+0

아아, GROUP BY를 잊어 버렸습니다. 거기에 맞습니다. 'codes_retrieved = 1'은 아마도'ON' 조건에 참여할 것입니다 만, OP에 대해 명확히하기 위해 남겨 둘 것입니다. – Wrikken

+0

답장을 보내 주셔서 감사합니다. 작동하는지 확인하고 답변을 확인합니다. 논리적으로, 그대로 보인다. 끝내기 오래 걸리지 않은 코드의 다른 부분으로 이동했습니다. – darioml

+0

모든 것은 HAVING 절과 별도로 작동합니다. 기본적으로 count()에서 계산해야하는 유일한 코드는 codes 절에서 = 1을 검색 한 코드입니다. – darioml

관련 문제