2016-12-16 1 views
1

J'ai les deux tables suivantes.Jointure SQL avec lignes manquantes

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 

Je voudrais obtenir une réponse qui a aussi toutes les questions que l'utilisateur n'a pas répondu à l'enquête.
Sortie prévue de SQL JOIN:

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

J'ai essayé différentes combinaisons de requêtes SQL, mais pas de chance. S'il vous plaît aider.

+2

si vous configurez un sqlfiddle (http://sqlfiddle.com), les gens seront plus susceptible d'aider, montrant également ce que vous avez déjà essayé ne fait jamais mal. – Kris

+0

J'ai installé sqlfiddle ici: – sumeetk

+0

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

Répondre

0

Puisque vous ne fournissez pas une table Users, vous pouvez vous retrouver avec quelque chose comme ceci:

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 

Vous voulez vraiment éviter d'avoir à faire dans la vraie vie cependant, la jointure croisée est va probablement aspirer toutes les performances hors du serveur si vos tables sont presque grandes.

Il serait préférable d'avoir une table Users afin que vous puissiez l'utiliser et à gauche se joindre contre elle comme ceci:

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, j'ai une table Utilisateurs. Enfait mon vrai problème consiste à rejoindre 11 tables. Sans le compliquer, j'ai voulu aider à trouver comment ajouter les rangées manquantes de la 2ème table. Laissez-moi essayer la requête SQL que vous avez suggérée. Merci. – sumeetk

+0

Avait une faute de frappe dans l'une des clauses de jointure, mais l'horrible jointure croisée sur une requête distincte me donne toutes les lignes que vous avez demandées. – Kris

+0

Kris, j'ai ajouté la troisième table des utilisateurs, mais la deuxième requête que vous avez suggérée n'a pas fonctionné comme prévu. http://sqlfiddle.com/#!9/973239/3 – sumeetk