2012-01-19 73 views
2

傍晚,即時通訊不知道我在這裏問什麼,但我會嘗試解釋。我不是在SQL最好的,但我做的嘗試......SQL - joing表 - 如果不匹配,返回值爲空

SELECT 
    qu.job_id, qu.engineer_id, qu.id AS `quote_id`, 
    jb.author, jb.image_ref, jb.job_title 
FROM 
    `ecom_quotes` qu, `ecom_jobs` jb 
WHERE 
    jb.author = 1 
AND 
    qu.job_id = jb.image_ref 
GROUP BY 
    jb.image_ref 

我使用上面列出由用戶發佈和獲取基於作業ID其他表等信息的工作。

問題是,如果作業沒有爲其發佈引號,則不會顯示(qu.job_id = jb.image_ref)。

所以,作爲一個快速修復(或因此我認爲)我

((qu.job_id = jb.image_ref) OR (jb.image_ref != '')) 

該做的工作更換,但是當沒有與之相關聯的報價則返回報價ID。

有什麼我可以做的嗎?

+0

怎麼樣了'離開join' –

回答

5

你會想要使用LEFT JOIN

即使在ecom_quotes中沒有匹配記錄,這仍將返回ecom_jobs的記錄。

編輯:交換表的順序...

SELECT 
    qu.job_id, qu.engineer_id, qu.id AS `quote_id`, 
    jb.author, jb.image_ref, jb.job_title 
FROM 
    `ecom_jobs` jb 
    LEFT JOIN `ecom_quotes` qu ON qu.job_id = jb.image_ref 
WHERE 
    jb.author = 1 
GROUP BY 
    jb.image_re 
+0

這又只帶回的結果,如果報價是目前...也許我在解釋垃圾!我可以返回用戶的所有工作結果,但前提是有人引用了該結果。我希望能夠由用戶返回工作,即使工作沒有報價 –

+0

@PhilJackson啊..我的錯誤 - 我想我現在得到它。新查詢如何工作? –

+0

接近完美,請解釋你所做的改變?非常感謝 –

0

爲什麼不嘗試:

SELECT 
    qu.job_id, qu.engineer_id, qu.id AS `quote_id`, 
    jb.author, jb.image_ref, jb.job_title 
FROM 
    `ecom_quotes` qu 
LEFT JOIN 
    `ecom_jobs` jb ON qu.job_id = jb.image_ref 
WHERE 
    jb.author = 1 
GROUP BY 
    jb.image_ref 
+0

這再次只帶回結果,如果報價存在 –