我正在使用 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
。问题: 如何查询才能返回用户的所有文章(有效),对于未列在表
media
中的文章,显示type=NULL
,对于列在表media
中的文章(如abc
),显示type="img"
?感谢您的帮助!
编辑: 表
articles
可能包含以下记录:abc
d
e
f
g
媒体
abc type=img
应该返回查询结果:
abc type=img
d type=NULL
e type=NULL
f type=NULL
g type=NULL
编辑:
如果有记录不在 media
中,我也不介意获取所有在 articles
中的记录,例如在此图像上的第二个连接左侧(“b.Key IS NULL”)。
解决方案: 好的。当连接两个表时,我需要检查除了用户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 )
感谢大家的建议!