2013-04-03 43 views
0

我遇到以下SQL查詢問題。正如你所看到的,我加入了一些表格(candidate_basic,candidate_lang,province_of_candidate,province,degree_of_candidate),然後我用另一個表「professional_experience_basic」加入結果,但是查詢返回了幾個實例(例如:它爲id_candidate_basic = 55,或者它返回id_candidate_basic = 59的三個實例)。如何使用LEFT JOIN優化此SQL查詢?

我的問題是,我只希望查詢返回每個id_candidate_basic 1實例。也就是說,具有值「1」的屬性「main_job」的實例,如果這不可能,則只是一個空值。

我試圖把和professional_experience_basic.main_job = 1 WHERE子句中,但是,它刪除實例與main_job = NULL

我覺得我已經接近最後的結果,但是我在這最後的努力中花了很多時間。有誰知道解決方案? 在此先感謝。

查詢:

SELECT DISTINCT 
    candidate_basic.id_candidate_basic, 
    candidate_lang.town, 
    province.name, 
    degree_of_candidate.id_degree_of_candidate,professional_experience_basic.main_job 

FROM (((((candidate_basic 
    INNER JOIN candidate_lang 
    ON candidate_lang.id_candidate_basic=candidate_basic.id_candidate_basic) 
    INNER JOIN province_of_candidate 
    ON province_of_candidate.id_candidate_basic=candidate_basic.id_candidate_basic) 
    INNER JOIN province 
    ON province.id_province=province_of_candidate.id_province) 
    INNER JOIN degree_of_candidate 
    ON degree_of_candidate.id_candidate_basic=candidate_basic.id_candidate_basic) 
    LEFT JOIN professional_experience_basic 
    ON professional_experience_basic.candidate_id=candidate_basic.id_candidate_basic) 

WHERE candidate_basic.candidate_state=2 
    AND degree_of_candidate.is_main_degree 
    AND candidate_lang.id_website_lang=1 

目前的結果是:

enter image description here

結果我想:

enter image description here

回答

1

變化professional_experience_basic.main_jobmax(professional_experience_basic.main_job)在日Ë列列表,然後:

GROUP BY candidate_basic.id_candidate_basic, candidate_lang.town, 
      province.name, degree_of_candidate.id_degree_of_candidate 
+0

由於內特C-K。它完美地運作。 –

0

第一組的結果

... AND candidate_lang.id_website_lang=1 
GROUP BY 
    candidate_basic.id_candidate_basic, 
    candidate_lang.town, 
    province.name, 
    degree_of_candidate.id_degree_of_candidate 

,我想你想main_job的最大值,但我不知道。 變化選擇:

SELECT DISTINCT 
    candidate_basic.id_candidate_basic, 
    candidate_lang.town, 
    province.name, 
    degree_of_candidate.id_degree_of_candidate,MAX(professional_experience_basic.main_job) 

好像你想在這裏最大的,但我不知道

+0

是的,他需要MAX或其他什麼東西。但是當做這種GROUP BY時,通常你並不關心你在最後一列中得到的數字。 –