2011-04-23 3 views
1
여기

내 코드입니다 :MySQL의 서브 쿼리 현장 적용 범위

SELECT field1, field2, 
     (SELECT * FROM table1 WHERE a = field2), 
     (SELECT COUNT(*) 
      FROM (SELECT * 
        FROM table2 
       WHERE c = field2) as t1) as count 
    FROM table3; 

... 그리고 여기에 오류 메시지입니다 :

/* SQL 오류 (1054) : 알 수없는 열을 'FIELD2'에서을 'where 절'*/

하나의 쿼리를 실행하여 table2의 총 개수를 가져 오려고합니다.

답변

0

내부 쿼리에서 외부 쿼리에 선언 된 변수를 사용하려고하면 문제가 발생합니다. 변수는 SQL에서 반대 방향으로 범위가 지정되므로 내부 쿼리에만 액세스 할 수 있습니다. 원하는 것은 무엇입니까 (저는 믿습니다) table2의 번호는 과 table1에서 일치하는 c을 찾습니다. 이것은 당신에게 그 대답을 줄 것입니다.

SELECT 
    table1.a, 
    table2.c, 
    count(*) 
FROM 
    table1 
JOIN 
    table2 ON table2.c = table1.a 
GROUP BY 
    table1.a 
+0

감사합니다. 이 예제는 매우 유용합니다! – artworker

0

나는 다시 쓴 조회 :

SELECT t3.field1, 
      t3.field2, 
      t1.*, 
      t2.cnt 
    FROM TABLE3 t3 
LEFT JOIN TABLE1 t1 ON t1.a = t3.field2 
LEFT JOIN (SELECT t.c, 
        COUNT(*) AS cnt 
      FROM TABLE2 t 
     GROUP BY t.c) t2 ON t2.c = t3.field2 

1054 오류가 깊은 field2이 하위 쿼리를 참조 때문이다 - 대부분의 단지 한 단계 깊은 지원합니다.

+0

조언 해 주셔서 감사합니다! 이 예제는 매우 유용합니다! – artworker