数据库
首页 > 数据库> > 如果在MySQL的第二个表中没有记录,如何查询两个表并返回NULL?

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

作者:互联网

我正在运行MySQL 5.0.88,需要从两个表中选择数据,即文章和媒体.

将图像上传到服务器时,我需要查询用户的所有文章,并查看媒体表中是否已经指定了路径(字段类型=“ 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的所有文章(正确),但类型字段始终为img,尽管媒体表中只有一条记录适用于文章abc.

题:
我需要如何查询,因此它返回用户(工作中)的所有文章,其中表中未列出的文章显示type = NULL,表中未列出的文章显示type =“ img”(例如作为abc)?

感谢帮助!

编辑:
表格文章可能包含记录:

abc 
d
e
f
g

餐桌媒体可能包括

abc type=img

查询应返回:

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

编辑:
我也不会介意获取不在媒体上的文章中的所有记录,例如在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 )

感谢您的建议!

解决方法:

您应该在LEFT JOIN上放置m.type =“ img”条件,而不是将其放在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;

标签:multiple-tables,select,left-join,mysql
来源: https://codeday.me/bug/20191127/2076837.html