2016-12-16 107 views
1

我有以下两个表。缺少行的SQL连接

SurveyTable

 
QID | Text 
---------------------------------------- 
    1 | Favorite movie 
    2 | Favorite book 
    3 | Favorite city 

SurveyResponses

 
UserID | QID | Answer 
---------------------------------------- 
    1001 | 1 | StarWars 
    1001 | 2 | Harry Potter 
    1001 | 3 | Los Angeles 
    1003 | 3 | New York 

我想获得其中也有所有的问题是,用户没有在调查中回答的响应。
预期SQL的输出连接

 
UserID | QID | Answer 
---------------------------------------- 
    1001 | 1 | StarWars 
    1001 | 2 | Harry Potter 
    1001 | 3 | Los Angeles 
    1003 | 1 | - 
    1003 | 2 | - 
    1003 | 3 | New York 

我尝试过各种SQL查询组合,但没有运气。请帮忙。

+2

,如果你设置一个sqlfiddle(http://sqlfiddle.com),人们会更可能会有所帮助,同时显示你已经尝试过的东西永远不会受伤。 – Kris

+0

我在这里设置了sqlfiddle: – sumeetk

+0

http://sqlfiddle.com/#!9/1e0d95 – sumeetk

回答

0

既然你不提供Users表,你最终可能会是这样的:

SELECT 
    U.UserId, Q.QID, A.Answer 
FROM SurveyTable Q 
CROSS JOIN (SELECT DISTINCT UserId FROM SurveyResponses) U 
LEFT JOIN SurveyResponses A ON A.QID = Q.QID AND U.UserId = A.UserId 

你真的想避免这样做在现实生活中,虽然,交叉连接是如果你的桌子靠近很大的话,可能会把所有的性能都吸引到服务器之外。

更好

将有一个Users表,以便您可以使用和左加入反对这样的:

SELECT 
    U.UserId, Q.QID, A.Answer 
FROM Users U 
INNER JOIN SurveyTable Q 
LEFT JOIN SurveyResponses A ON A.UserId = U.UserId AND A.QID = Q.QID 
+0

Kris,我有一个Users表。事实上,我真正的问题涉及到加入11个表格。不要太复杂,我想要帮助解决如何从第二个表添加缺失的行。让我试试你建议的sql查询。谢谢。 – sumeetk

+0

在其中一个连接子句中存在拼写错误,但可怕的跨连接通过不同的查询确实为您提供了所需的所有行。 – Kris

+0

克里斯,我已经添加了第三个用户表,但是您建议的第二个查询没有像预期的那样工作。 http://sqlfiddle.com/#!9/973239/3 – sumeetk