我有两张桌子。假设一个有操作列表(我工作的原始表有一个发送和接收的消息列表),另一个是用户表,其中包含用户的全名。我已经复制了我现在所拥有的问题。
在操作表(消息表)中找到的用户可能不存在于用户表中。我正在使用子查询来针对操作表的原始查询中的用户名选择用户的全名。当用户表中不存在操作表中的用户时,MySQL 返回NULL,这是预期的。但相反,我希望它返回原始用户名。
比如说,praveen
用户表和操作表中是否都有。所以,我得到这样的东西:Praveen Kumar likes something.
。说,我有另一个用户名,bluff
它不存在于 users 表中,并且操作变成了这样:NULL shares something.
. 在这里而不是NULL,是否可以返回用户名本身,例如bluff shares something.
?
此处提供了我的SQL Fiddle、架构详细信息和其他参考资料。让我知道我是否可以以更好的方式做到这一点。谢谢。
MySQL 5.5.30 模式设置
CREATE TABLE `users`
(`username` varchar(15), `fullname` varchar(15))
;
INSERT INTO `users`
(`username`, `fullname`)
VALUES
('praveen', 'Praveen Kumar'),
('jeff', 'Jeff Atwood')
;
CREATE TABLE `actions`
(`user` varchar(7), `action` varchar(7))
;
INSERT INTO `actions`
(`user`, `action`)
VALUES
('praveen', 'Like'),
('jeff', 'Comment'),
('praveen', 'Answer'),
('praveen', 'Share'),
('jeff', 'Comment'),
('bluff', 'Share'),
('jeff', 'Like')
;
询问
SELECT *, (
SELECT `fullname` FROM `users` WHERE `user` = `username`
) AS `name` FROM `actions`
+---------+---------+---------------+
| USER | ACTION | NAME |
+---------+---------+---------------+
| praveen | Like | Praveen Kumar |
| jeff | Comment | Jeff Atwood |
| praveen | Answer | Praveen Kumar |
| praveen | Share | Praveen Kumar |
| jeff | Comment | Jeff Atwood |
| bluff | Share | (null) |
| jeff | Like | Jeff Atwood |
+---------+---------+---------------+
预期产出
+---------+---------+---------------+
| USER | ACTION | NAME |
+---------+---------+---------------+
| praveen | Like | Praveen Kumar |
| jeff | Comment | Jeff Atwood |
| praveen | Answer | Praveen Kumar |
| praveen | Share | Praveen Kumar |
| jeff | Comment | Jeff Atwood |
| bluff | Share | bluff |
| jeff | Like | Jeff Atwood |
+---------+---------+---------------+