缺少行的SQL连接

时间:2016-12-16 00:24:15

标签: mysql left-join missing-data self-join

我有以下两张表。

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查询组合,但没有运气。请帮忙。

1 个答案:

答案 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