我想连接表但仍然从一个表接收结果,即使另一个表没有结果

时间:2012-07-06 22:26:45

标签: sql sqlite

我在Chrome WebDB / SQLite

中这样做

我有会员表和答案表,会员可能会或可能没有答案。

我正在尝试取回包含会员姓名和答案的结果集。但是如果他们没有给出答案,我仍然希望他们的名字能够回来。

有人可以尝试帮助我吗?

SELECT m.LastName, 
       m.FirstName, 
       m.MiddleName, 
       s.surveyAnswer 
FROM Members m 
    LEFT JOIN SurveyAnswers s 
      ON s.memberID = m.id 
WHERE m.id = ? 
AND s.eventID = ? 

[results.rows.item(i).memberID,eventId],

这是我尝试但仍然只接收回答问题并且也在SurveyAnswers表中的成员。

4 个答案:

答案 0 :(得分:2)

使s.eventID成为联接的一部分,而不是WHERE子句。

您的select语句看起来应该更像:

SELECT m.LastName, 
       m.FirstName, 
       m.MiddleName, 
       s.surveyAnswer 
FROM Members m 
    LEFT JOIN SurveyAnswers s 
      ON s.memberID = m.id 
        AND s.eventID = ? 
WHERE m.id = ? 

答案 1 :(得分:1)

最近以一个维恩图的形式向我解释了联接,从那时起我就清楚地了解了在我的查询中使用哪些联接。

看一下下面链接的页面,它以相同的方式解释它,我保证你永远不需要再次检查你需要的连接!

visual explanation of SQL joins

答案 2 :(得分:1)

您需要使用LEFT OUTER连接,并且还需要在连接中指定SurveyAnswers eventID的条件,而不是在where子句中。像这样:

SELECT m.LastName, m.FirstName, m.MiddleName, s.surveyAnswer FROM Members m 
LEFT OUTER JOIN SurveyAnswers s ON (s.memberID = m.id AND s.eventID = ?) 
WHERE m.id = ? 

答案 3 :(得分:0)

您想使用LEFT OUTER JOIN