2017-02-16 75 views
0

我目前卡在這裏,不知道下一步該怎麼做,因爲我無法將tv_main別名用於2級深度子查詢。這是我的代碼(我評論了有問題的部分)。任何幫助將不勝感激。謝謝。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

天哪。我不知道該怎麼做。主要是因爲你沒有解釋你想要*做什麼。嘗試用樣本數據,期望的結果以及您想要完成的解釋來提出另一個問題。 –

+0

對不起,我弄明白了 –

回答

0

我終於解決了。我不知道mysql只允許1個深層的關聯。

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;