我有这个查询
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吗?
答案 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