2014-05-17 5 views
0

나는이 오류하위 쿼리는 내가 아는 그나마 1 개 이상의 행을 반환

SELECT f.*, 
     (SELECT MAX(e) FROM seriale WHERE s = MAX(k.s) AND id_serialu = f.id) as e, 
     MAX(k.s) as s, 
     (SELECT tytul FROM seriale c WHERE c.s = s AND c.e = e) as tytul 
    FROM serial f 
    LEFT JOIN seriale k ON f.id=k.id_serialu 
    GROUP BY f.id 
    ORDER BY f.id DESC 
    LIMIT 25 
+0

이 쿼리는 직렬 테이블의 각 행에 대해 하나 이상의 행을 반환합니다. 더 이상 정보를 제공하지 않으면 어떤 일이 벌어지고 있으며 어떻게 쿼리를 수정하는지 말하는 것은 불가능합니다. 시리얼과 시리얼은 어떻게 관련되어 있습니까? 왜 seriale에 LEFT JOIN을 추가하고 이것을 같은 테이블의 SUBSELECT와 혼합합니까? – Frazz

답변

0

나는 당신이 당신의 하위 쿼리에 몇 가지 별칭을 필요가 있다고 생각을 잡을 "tytul"필드를 얻을려고. 당신이하지 않으면

(SELECT tytul FROM seriale c WHERE c.s = f.s AND c.e = f.e) as tytul 

sec입니다 가장 가까운 범위에서 추구하는, 그래서 쿼리는 다음과 같이 해석됩니다

(SELECT tytul FROM seriale c WHERE c.s = c.s AND c.e = c.e) as tytul 

이 분명 하나 이상을 반환 왜냐하면 테이블의 모든 것을 반환하기 때문입니다.

별칭을 사용하면 seriale에서 s와 e의 조합 당 최대 1 개의 행이있는 경우에만 작동합니다.

0

select 문에서 하위 쿼리를 사용하면 특정 하위 쿼리는 1 행만 반환해야합니다.

예를 들어

: 조회에서이

(SELECT MAX(e) FROM seriale WHERE s = MAX(k.s) AND id_serialu = f.id) 

(SELECT tytul FROM seriale c WHERE c.s = s AND c.e = e) 

는 단일 값을 반환해야합니다. 1 개 이상의 값을 반환 할 수 없습니다.

관련 문제