Mysql左加入空结果

时间:2010-05-24 00:12:54

标签: sql mysql null left-join

我有这个查询

SELECT articles.*, 
       users.username AS `user` 
 FROM `articles` 
LEFT JOIN `users` ON articles.user_id = users.id 
 ORDER BY articles.timestamp 

基本上它返回文章列表和文章关联的用户名。现在,如果users表中没有特定用户标识的条目,则users var为NULL。反正有没有,如果它的null返回类似“用户未找到”的东西?或者我必须使用PHP吗?

4 个答案:

答案 0 :(得分:35)

使用:

   SELECT a.*, 
          COALESCE(u.username, 'User Not Found') AS `user` 
     FROM ARTICLES a
LEFT JOIN USERS u ON u.id = a.user_id
 ORDER BY articles.timestamp 

文档:

选择COALESCE而非IF或IFNULL的原因是COALESCE是ANSI标准,而其他方法不能可靠地实施在其他数据库上。在我查看IF之前我会使用CASE,因为CASE是ANSI标准,这样可以更容易地将查询移植到其他数据库。

答案 1 :(得分:5)

您可以使用IFNULL功能:

SELECT articles.*, IFNULL(users.username, 'User Not Found') AS `user`
FROM `articles` LEFT JOIN `users` ON articles.user_id = users.id
ORDER BY articles.timestamp 

答案 2 :(得分:1)

您可以使用IF()在Oracle中使用解码的位置。

所以

SELECT articles.*, IF(users.username IS NULL, 'No user found', users.username) AS `user` 
FROM `articles` LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 

应该有效。 注意:我没有方便的mysql,所以没有测试查询。但如果失败,应该进行微小的修改。不要downvote;)

答案 3 :(得分:0)


SELECT articles.*, 
       IFNULL(users.username,'User Not Found') AS `user` 
FROM `articles` 
LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp