2009-04-22 3 views
17

을 반환MySQL의 서브 쿼리는 하나 이상의 행 나는이 쿼리를 실행하고

#1242 - Subquery returns more than 1 row.

COUNT 문을 하위 쿼리에 배치 해봤지만 잘못된 구문을 사용합니다. 너.

+0

@ Dropped.on.Caprica stop smart-ass. 이 데이터는 공개되었습니다. 학습 목적으로 직접 얻을 수 있습니다. – Eimantas

+0

@ Eimantas 그의 질문에 대한 역사 및 답변에 대해서는 달리 제안하는 것처럼 보입니다. 어느 쪽이든, 나는 끝났어. –

답변

13

당신은에 의해 간단한 그룹, 부질없이 시도 할 수보십시오 :

SELECT voterfile_county.Name, 
    voterfile_precienct.PREC_ID, 
    voterfile_precienct.Name, 
    count(voterfile_voter.ID) 
FROM voterfile_county 
JOIN voterfile_precienct 
    ON voterfile_precienct.County_ID = voterfile_County.ID 
JOIN voterfile_household 
    ON voterfile_household.Precnum = voterfile_precienct.PREC_ID 
JOIN voterfile_voter 
    ON voterfile_voter.House_ID = voterfile_household.ID 
GROUP BY voterfile_county.Name, 
    voterfile_precienct.PREC_ID, 
    voterfile_precienct.Name 

당신은 GROUP BY, 당신은 있어야합니다에 그룹화되지 않은 열을 사용하는 경우 집계 절 (fe SUM 또는 COUNT).이 경우 카운티 이름, precienct.id 및 precient.name을 그룹화해야합니다.

+0

이 작동하면 92.5746 초가 걸리고 결과 세트가 반환됩니다. 그 속도를 높이는 방법에 대한 생각? – gsueagle2008

+0

관계에 외래 키가 있습니까? 그게 도움이 될거야. – Andomar

+0

조인에 사용되는 모든 열에 대해 색인을 추가하여 속도를 높이십시오. 결과 집합이 큰 경우 작게 만들면 속도가 빨라집니다. –

3

SELECT 
voterfile_county.Name, voterfile_precienct.PREC_ID, 
voterfile_precienct.Name, 
    (SELECT COUNT(voterfile_voter.ID) 
    FROM voterfile_voter JOIN voterfile_household 
    WHERE voterfile_voter.House_ID = voterfile_household.ID 
     AND voterfile_household.Precnum = voterfile_precienct.PREC_ID) as Voters 
FROM voterfile_precienct JOIN voterfile_county 
ON voterfile_precienct.County_ID = voterfile_County.ID 
+0

그것은 단지 쿼리가 실행되고 있다고 말합니다. 이것은 내가 얻은 것보다 더 먼 것입니다. 그러나 주사위는 없습니다. – gsueagle2008

+0

가입 변경을 시도하십시오. –

+0

은 아직 전화를 끊고 있습니다. – gsueagle2008

59

오류가 발생하는 경우 : 오류 번호 1242 하위 쿼리가 두 개 이상의 행을 반환하면 하위 쿼리 앞에 ANY를 넣으십시오. 예 :

이 쿼리 반환 오류 :

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 

이 좋은 쿼리

SELECT * FROM t1 WHERE column1 = ANY (SELECT column1 FROM t2); 
+1

이것이 내 문제에 꼭 필요한 것입니다. 고맙습니다! –

+6

column1 = ANY (하위 쿼리)가 작동하고 column1 IN (하위 쿼리)이 아닌 이유는 무엇입니까? 같은 관계형 논리를 재현하지 않습니까? – Prusprus

+0

같은 테이블에서 select 문을 기반으로 행을 업데이트하는 내 문제를 해결했습니다. – Patrick

3

는 아래의 예를 참조하고 그에 따라 쿼리를 수정합니다.

select COUNT(ResultTPLAlias.id) from 
(select id from Table_name where ....) ResultTPLAlias; 
관련 문제