我有以下两张表。
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查询组合,但没有运气。请帮忙。
答案 0 :(得分: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