【问题标题】:how to query two tables and return NULL if a record is not in the 2nd table in MySQL?如果记录不在 MySQL 的第二个表中,如何查询两个表并返回 NULL?
【发布时间】:2012-08-16 09:21:26
【问题描述】:

我正在运行MySQL 5.0.88,需要从两个表中选择数据,分别是articlesmedia

上传图片到我的服务器时,我需要查询用户的所有文章,看看媒体表(字段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 的文章,这些文章没有列在表mediatype="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


    【解决方案1】:

    您应该将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;
    

    【讨论】:

    • 试过这个,但它不起作用。我仍然得到所有记录,每条记录都指定了“img”,而只有 ABC 应该有“img”,所有其他记录应该有 NULL 或空字符串或......?
    • 这真的不应该发生你确定 mnedia 表没有为其他文章设置 type="img" 的条目吗?
    • 刚刚找到了解决方案。只有 user_id 上的左连接才是问题所在,因为我实际上是在检查媒体表中用户的样式编号。请参阅上面的解决方案
    【解决方案2】:

    我认为稍微调整一下你的 where 子句就足够了:

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

    因为 "img" 和 NULL 是您要查找的两个值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 2015-02-09
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多