【问题标题】:MYSQL JOIN if field is not null [closed]如果字段不为空,则 MYSQL JOIN [关闭]
【发布时间】:2014-05-10 14:42:26
【问题描述】:

我想通过读取一个完整的表从数据库中获取数据,连接另一个和一个,但只有在第一个指定字段不为 NULL 时才连接最后一个。这是查询:

SELECT a.*, u1.Name, u2.Name FROM `articles` a
JOIN `users` u1 ON (a.id=1 AND u1.`id` = a.`authorid` )
JOIN `users` u2 ON (a.`updaterid` IS NOT NULL AND u2.`id` = a.`updaterid`) 

应该可以正常工作,但事实并非如此。如果 updaterid 不是 NULL,它会返回有效结果,但如果是,我会不断得到空结果。关于这个有什么想法吗?

PS 我也尝试了一些组合,例如使用 WHERE 或不同类型的 JOIN。

【问题讨论】:

  • 考虑提供适当的 DDL(和/或 sqlfiddle)以及所需的结果集

标签: mysql database join


【解决方案1】:

如果我对您的理解正确(您没有提供任何示例数据),此查询将提供您想要的数据:

SELECT a.*, u1.Name, u2.Name FROM `articles` a
JOIN `users` u1 ON (a.id=1 AND u1.`id` = a.`authorid` )
LEFT JOIN `users` u2 ON (a.`updaterid` IS NOT NULL AND u2.`id` = a.`updaterid`) 

如果a.updateridIS NULL`(或更新用户被删除),u2.Name 将是 NULL,否则将保留名称。

【讨论】:

【解决方案2】:

使两个连接都成为外连接。

SELECT a.*, u1.Name, u2.Name 
FROM `articles` a
   Left JOIN `users` u1 
      ON u1.`id` = a.`authorid`
        AND a.id=1
   left JOIN `users` u2 
      ON  u2.`id` = a.`updaterid`
         AND a.`updaterid` IS NOT NULL 

一旦你这样做了,你可能不需要is not null 条件......

SELECT a.*, u1.Name, u2.Name 
FROM `articles` a
   Left JOIN `users` u1 
      ON u1.`id` = a.`authorid`
        AND a.id=1
   left JOIN `users` u2 
      ON  u2.`id` = a.`updaterid`

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多