如何查询两个表并返回NULL如果记录不在MySQL的第二个表中?
我正在运行MySQL 5.0.88
并需要从两个表中选择数据,称为articles
和media
。如何查询两个表并返回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=NULL
表media
(如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;
我觉得刚刚适应你的where子句了一下,应该是足够了:
WHERE
a.iln = id_12345
AND (
m.type = "img"
OR m.type IS NULL
)
由于“IMG”和NULL是你要找的
也不起作用。我得到所有记录“type = img” – frequent 2012-08-16 09:40:02
尝试过,但它不起作用。我仍然获得每个记录都具有指定的“img”的所有记录,而只有ABC应该有“img”,并且所有其他记录应该有NULL或空字符串或...? – frequent 2012-08-16 09:38:05
真的不应该发生 你确定mnedia表没有条目,其中type =“img”被设置为其他文章? – gabtub 2012-08-16 09:51:37
刚刚找到解决方案。 user_id上的左连接只是问题,因为我实际上正在检查媒体表中的用户的样式编号。看到我上面的解决方案 – frequent 2012-08-16 09:52:35