2017-02-16 1 views
0

2 단계 하위 하위 쿼리에 tv_main 별칭을 사용할 수 없기 때문에 현재 여기에 붙어 있고 다음에 수행 할 작업을 알지 못합니다. 여기에 내 코드가있다. (나는 문제가있는 부분을 주석으로 처리했다.) 어떤 도움을 주시면 감사하겠습니다. 감사.mysql은 외부 별칭을 2 단계 깊은 하위 쿼리로 사용합니다.

SELECT tv_main.id, 
    tv_main.vesselName, 
    (
     SELECT SUM(t_statCtr.status = 'EX CREW') 
     FROM 
     (
       (
        SELECT tpi_stat.id, 
          tvv.vesselName, 
          lastname, 
          firstname, 
          middlename, 
          IF(tpi_stat.returningCrew = 1, 'NEW HIRE', 
           IF(COUNT(tc_ctr.personnel_id) > 1, 'EX CREW', 'NEW HIRE') 
          ) 
          AS status 
        FROM tbl_contracts AS tc_stat 
        LEFT JOIN tbl_personnel_info AS tpi_stat 
        ON tpi_stat.id = tc_stat.personnel_id 

        LEFT JOIN tbl_contracts AS tc_ctr 
        ON tpi_stat.id = tc_ctr.personnel_id 

        LEFT JOIN tbl_vessels AS tvv 
        ON tvv.id = tpi_stat.lastJoinedVsl 

        WHERE 
          tpi_stat.emp_status = 'ON-BOARD' 
          AND tc_stat.status = 'ACTIVE' 
          AND tvv.id = tv_main.id --This line have an error, (Unknown Column tv_main.id in where clause) 
          GROUP BY tc_stat.personnel_id 
       ) AS t_statCtr 
     ) 
    ) AS ex_crew, 
    NULL AS new_hire 
    FROM tbl_vessels AS tv_main -- I need this one to use inside the subquery 
    LEFT JOIN tbl_personnel_info AS tpi 
    ON tv_main.id = tpi.lastJoinedVsl 

    LEFT JOIN tbl_contracts AS tc 
    ON tpi.id = tc.personnel_id 
    WHERE 
    tpi_stat.emp_status = 'ON-BOARD' 
    AND tc_stat.status = 'ACTIVE' 
    GROUP BY tv_main.vesselName 
+2

Gosh. 나는 무엇을해야할지 전혀 모른다. 주로 당신이 * 원하는 * 것을 설명하지 않았기 때문에. 샘플 데이터, 원하는 결과 및 원하는 결과에 대한 설명으로 다른 질문을 시도하십시오. –

+0

죄송합니다. 알아낼 수 있습니다. –

답변

0

마지막으로 해결했습니다. 나는 mysql이 오직 하나의 깊은 수준의 상관 관계를 허용한다는 것을 몰랐다.

SELECT tv_main.vesselName, 
    SUM(t_dummy.statusx = 'EX CREW') AS ex_crew, 
    SUM(t_dummy.statusx = 'NEW HIRE') AS new_hire 
FROM tbl_vessels AS tv_main 

LEFT JOIN tbl_personnel_info AS tpi_main 
ON tpi_main.lastJoinedVsl = tv_main.id 

LEFT JOIN tbl_contracts AS tc_main 
ON tc_main.personnel_id = tpi_main.id 

LEFT JOIN 
(
    SELECT tvv.id, 
      tpi_stat.id AS tpiid, 
      IF(tpi_stat.returningCrew = 1, 'NEW HIRE', 
       IF(COUNT(tc_ctr.personnel_id) > 1, 'EX CREW', 'NEW HIRE') 
       ) 
      AS statusx 
    FROM tbl_contracts AS tc_stat 
    LEFT JOIN tbl_personnel_info AS tpi_stat 
    ON tpi_stat.id = tc_stat.personnel_id 

    LEFT JOIN tbl_contracts AS tc_ctr 
    ON tpi_stat.id = tc_ctr.personnel_id 

    LEFT JOIN tbl_vessels AS tvv 
    ON tvv.id = tpi_stat.lastJoinedVsl 
    GROUP BY tc_stat.personnel_id 
) AS t_dummy 
ON tpi_main.id = t_dummy.tpiid 
WHERE 
tpi_main.emp_status = 'ON-BOARD' 
AND tc_main.status = 'ACTIVE' 
AND t_dummy.id = tv_main.id 
GROUP BY tv_main.vesselName; 
관련 문제