【发布时间】:2011-06-18 18:31:24
【问题描述】:
我要做的是为网站创建一个 cmets 部分,
cmets 由用户名、电子邮件和评论组成。我将此数据存储在“cmets”表中
CREATE TABLE `comments` (
`commentid` int(5) NOT NULL auto_increment,
`user` varchar(40) NOT NULL default '',
`email` varchar(100) NOT NULL default '',
`comment` text NOT NULL,
PRIMARY KEY (`commentid`)
)
我想要做的是执行一个查询,该查询会获取所有这些数据,但还会检查“用户”表中的电子邮件地址以查看它是否存在。如果是这样,请从“misc”表中获取头像。如果“用户”表中不存在该电子邮件,则将其留空。
在我尝试查询的那一刻,如果电子邮件存在于“用户”表中,它只会从 3 个表中获取数据。我有另一条匿名用户留下的评论,但没有被查询抓住。
CREATE TABLE `users` (
`userid` int(25) NOT NULL auto_increment,
`email` varchar(255) NOT NULL default '',
`username` varchar(25) NOT NULL default '',
PRIMARY KEY (`userid`)
)
CREATE TABLE `misc` (
`miscid` int(4) NOT NULL auto_increment,
`userid` varchar(3) NOT NULL default '',
`avatar` varchar(100) NOT NULL default '',
PRIMARY KEY (`miscid`)
)
我很确定我需要一个嵌套选择作为列名,这样如果有一封电子邮件,它就会显示在那里……如果没有,它就留空。
编辑:
使表格结构成为应有的样子。
这是我刚刚尝试过的查询,但它只显示具有电子邮件地址的行。应该有另一个没有电子邮件地址
SELECT c.comment, c.user, av.avatar
FROM comments c
INNER JOIN users u ON c.email = u.email
LEFT OUTER JOIN (
SELECT userid, avatar
FROM misc
) AS av ON av.userid = u.userid
【问题讨论】:
标签: mysql sql select inner-join