左边或右边的连接是否可以设置此结果?

时间:2011-11-25 21:20:23

标签: mysql left-join

我有一个带有独特问题的问题表和一个答案表,其中的行与特定用户提交的答案相对应。我想要做的是创建一个查询,为每个问题返回一行,并包括登录用户的答案。如果用户尚未回答问题,则答案列应该为该问题显示NULL。无论用户是否已回答,查询都必须为每个问题返回一行,并且不应返回任何其他用户的回答行。

以下是我的表格:

CREATE TABLE IF NOT EXISTS `questions` (
`id` int(10) unsigned NOT NULL auto_increment,
`question` text NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `answers` (
`fb_user` int(3) unsigned NOT NULL,
`question_id` int(10) unsigned NOT NULL,
`answer` text NOT NULL,
UNIQUE KEY `fb_user` (`fb_user`,`question_id`)
) ENGINE=InnoDB;

目前我正在使用两个查询来完成这项工作:

CREATE TEMPORARY TABLE answers_f SELECT * from answers WHERE fb_user = '$fb_profile_id'
SELECT questions.*, answers_f.* FROM answers_f RIGHT JOIN questions ON questions.id = answers_f.question_id ORDER BY questions.id

的问题?有没有办法只使用一个左或右连接查询与子查询或多连接,而不是必须创建一个临时表,以及我上面做过?

1 个答案:

答案 0 :(得分:5)

要将其作为单个查询编写,您需要将用户名作为连接条件的一部分进行测试,而不是作为WHERE子句。

SELECT
    questions.id,
    questions.question,
    answers.answer
FROM questions
LEFT JOIN answers
ON question_id = questions.id
AND fb_user = 'foobar'
ORDER BY questions.id