SQL - joing表 - 如果不匹配则返回null

时间:2012-01-19 22:22:39

标签: mysql sql

晚上,我不确定我在这里问什么,但我会尽力解释。我不是最好的SQL,但我确实尝试...

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。

我有什么可以做的吗?

2 个答案:

答案 0 :(得分:5)

您需要使用LEFT JOIN

即使ecom_jobs中没有匹配的记录,这仍会返回ecom_quotes的记录。

编辑:改变表格的顺序......

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

答案 1 :(得分: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