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