如何查询两个表并返回NULL如果记录不在MySQL的第二个表中?

问题描述:

我正在运行MySQL 5.0.88并需要从两个表中选择数据,称为articlesmedia如何查询两个表并返回NULL如果记录不在MySQL的第二个表中?

将图像上传到我的服务器时,我需要查询用户的所有文章,并查看是否已有在介质表(字段type="img")中指定的路径以避免运行不必要的覆盖。

我曾希望在我的查询中只包含m.type,但我无法让它正常工作。

我的查询看起来是这样的:

SELECT DISTINCT a.style, a.filename, a.path, m.type 
    FROM articles AS a 
    LEFT JOIN mnedia AS m 
     ON a.iln = m.iln 
    WHERE 
     a.iln = id_12345 
     AND m.type = "img" 
     AND m.type IS NOT NULL 

这给我的用户id_12345所有文章(正确的),但type场常是img虽然媒体表只对文章abc一个记录。

问题
如何做我需要查询,所以它返回一个用户的所有文章(工作)的文章,其未在表media上市type="img"的文章,这是在上市显示type=NULLmedia(如abc)?

感谢您的帮助!

编辑: 表articles可以包括记录:

abc 
d 
e 
f 
g 

media可包括

abc type=img 

查询应返回:

abc type=img 
d type=NULL 
e type=NULL 
f type=NULL 
g type=NULL 

编辑
我也woudn't介意在articles不在media所有记录,如this图像,第二个加入左侧(“b.Key IS NULL)

SOLUTION: 好的。加入这两个表时,我需要检查另一个字段的旁边者user_id。这是它是如何工作的:

SELECT DISTINCT a.style, a.filename, a.path, m.type 
    FROM articles AS a 
    LEFT JOIN mnedia AS m 
     ON a.iln = m.iln 
     AND a.style= m.style 
    WHERE 
     a.iln = id_12345 
     AND (m.type = "img" OR m.type IS NULL) 

感谢您的建议!

两个值,你应该在把m.type = "img"条件LEFT JOIN而不是将其放在WHERE子句中:

SELECT DISTINCT a.style, a.filename, a.path, m.type 
FROM articles AS a 
    LEFT JOIN mnedia AS m 
     ON a.iln = m.iln 
      AND m.type = "img" 
WHERE a.iln = id_12345; 
+0

尝试过,但它不起作用。我仍然获得每个记录都具有指定的“img”的所有记录,而只有ABC应该有“img”,并且所有其他记录应该有NULL或空字符串或...? – frequent 2012-08-16 09:38:05

+0

真的不应该发生 你确定mnedia表没有条目,其中type =“img”被设置为其他文章? – gabtub 2012-08-16 09:51:37

+0

刚刚找到解决方案。 user_id上的左连接只是问题,因为我实际上正在检查媒体表中的用户的样式编号。看到我上面的解决方案 – frequent 2012-08-16 09:52:35

我觉得刚刚适应你的where子句了一下,应该是足够了:

WHERE 
     a.iln = id_12345 
     AND (
       m.type = "img" 
       OR m.type IS NULL 
      ) 

由于“IMG”和NULL是你要找的

+0

也不起作用。我得到所有记录“type = img” – frequent 2012-08-16 09:40:02