2016-08-07 3 views
1

J'ai deux tables, une avec setIDs et les valeurs de ces paramètres pour chaque userID et un autre avec userIDs, leurs e-mails et les noms d'utilisateur. J'essaie de joindre les valeurs de paramètres spécifiques, le problème est que tous les utilisateurs n'ont pas ce paramètre spécifique lié à leur ID, donc je me retrouve avec moins de lignes que j'en ai réellement besoin.SQL LEFT JOIN O WH

Table 1 
userID settingID settingValue 

Table 2 
userID userDOB userEmail userName 

Ma requête ressemble à ceci:

SELECT u.userID, u.userEmail, s.settingValue 
FROM users u 
LEFT JOIN userSettings s ON u.userID = s.userID 
WHERE s.settingID = 1 

Que dois-je faire pour obtenir tous les utilisateurs dans la liste?

+1

double possible de [Gauche JOIN avec clause Where] (http://stackoverflow.com/questions/4752455/left-join-with-where-clause) –

Répondre

3

Votre clause where vous transforme left join en inner join. Mettez la condition dans la jointure

SELECT u.userID, u.userEmail, s.settingValue 
FROM users u 
LEFT JOIN userSettings s ON u.userID = s.userID 
         AND s.settingID = 1 
0

vous pouvez utiliser UNION ALL clause de combiner deux JOINS

SELECT u.userID, u.userEmail, s.settingValue 
    FROM users u 
    LEFT userSettings s 
    ON u.userID = s.userID 
UNION ALL 
    SELECT u.userID, u.userEmail, s.settingValue 
    FROM users u 
    RIGHT userSettings s 
    ON u.userID = s.userID