如果字段不为null,则为MYSQL JOIN

时间:2014-05-10 14:42:27

标签: mysql database join

我希望通过读取一个整表来从数据库中获取数据,再连接另一个,但只有当第一个中的指定字段不是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。

2 个答案:

答案 0 :(得分:12)

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

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`) 
如果u2.Name为空(或更新者用户被删除),

NULL将为a.updaterid,否则将保留该名称。

答案 1 :(得分:1)

使两个连接外连接。

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`