【发布时间】:2012-08-16 09:21:26
【问题描述】:
我正在运行MySQL 5.0.88,需要从两个表中选择数据,分别是articles 和media。
上传图片到我的服务器时,我需要查询用户的所有文章,看看媒体表(字段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。
问题:
我需要如何查询,所以它返回一个用户(工作)的所有文章,显示type=NULL 的文章,这些文章没有列在表media 和type="img" 的文章中,列在表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
编辑:
我也不介意在articles 中获取不在media 中的所有记录,例如在this 图像上,第二个加入左侧(“b.Key IS NULL)
解决方案: 好的。加入两个表时,我需要检查除 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 )
感谢大家的建议!
【问题讨论】:
标签: mysql select left-join multiple-tables