본문 바로가기
MySql

MySQL mysql-하위 쿼리에 필드 값 전달

by 베이스 공부 2020. 12. 18.
반응형

이 경우 하위 쿼리로 조인하고 deptid를 조인 된 하위 쿼리에 전달하고 싶지만 'D가 정의되지 않았습니다'오류 메시지가 표시됩니다.

SELECT * 
    FROM(   
        SELECT D.name AS deptname,D.id AS deptid,WT.sortposition AS deptsortposition 
        FROM departments D JOIN web_taxonomy WT ON (WT.deptid=D.id AND WT.classid=0) 
        WHERE D.web=1
        ORDER BY sortposition
    ) AS D
    LEFT JOIN (
        SELECT C.name AS classname,C. id AS classid,C.department,WT.sortposition AS classsortposition,WT.deptid
        FROM classes C
        JOIN web_taxonomy WT ON (WT.classid=C.id AND WT.subclassid=0 AND WT.deptid=D.deptid) 
        WHERE web=1 ORDER BY classsortposition  
    ) AS C ON (C.department=D.deptid)

위의 강력한 태그로 감싼 것과 유사한 참조를 전달할 방법이 있습니까?

편집 : 실수를 저질렀 고 원래 작업 쿼리를 남겨두고 기능하고 싶은 부분을 추가했습니다. 기본적으로 D 하위 쿼리 테이블에서 발견 된 것과 동일한 deptid를 공유하는 행만 이미 가져 와서 조인 하위 쿼리의 크기를 최소화하고 싶습니다.

 

해결 방법

 

별칭을 지정하는 하위 쿼리 내에서 별칭 "D"를 사용할 수 없습니다.

이것은 작동합니다 (첫 번째 하위 쿼리에서 D 대신 X를 사용합니다-꼭 필요하지는 않지만 가독성을 높이고 D에 대한 참조를 두 번째 하위 쿼리 외부로 이동).

SELECT * 
    FROM(   
        SELECT 
           X.name AS deptname
           , X.id AS deptid
           , WT.sortposition AS deptsortposition 
        FROM departments X 
        JOIN web_taxonomy WT ON (WT.deptid=X.id AND WT.classid=0) 
        WHERE X.web=1
        ORDER BY sortposition
    ) AS D  -- this is available to objects referencing this alias
    LEFT JOIN (
        SELECT 
           C.name AS classname
           , C. id AS classid
           , C.department
           , WT.sortposition AS classsortposition
           , WT.deptid
        FROM classes C JOIN web_taxonomy WT 
        ON WT.classid=C.id AND WT.subclassid=0
        WHERE web=1 ORDER BY classsortposition  
    ) AS C ON C.department=D.deptid AND C.deptid = D.deptid -- i.e. here

 

참조 페이지 https://stackoverflow.com/questions/19911146

 

 

반응형

댓글