Je tente de construire une requête qui inclura une colonne indiquant si un utilisateur a téléchargé un document ou non. J'ai une table appelée HasDownloaded avec les colonnes suivantes: id, documentID, memberID. Savoir si un utilisateur a téléchargé un document spécifique est facile; mais j'ai besoin de générer une requête où les résultats ressembleront à ceci:Aide avec un WHERE sur une requête SQL LEFT JOIN
name id
----------------------
abc NULL
bbb 2
ccc 53
ddd NULL
eee 13
L'ID n'est pas vraiment important; ce qui m'intéresse c'est de savoir si le document a été téléchargé (est-il NULL ou non).
Voici ma question:
SELECT Documents.name, HasDownloaded.id FROM Documents
LEFT JOIN HasDownloaded ON HasDownloaded.documentID = Documents.id
WHERE HasDownloaded.memberID = @memberID
Le problème est, cela ne des valeurs que si une entrée existe pour l'utilisateur spécifié dans le tableau HasDownloaded. Je voudrais garder cela simple et seulement avoir des entrées dans HasDownloaded pour les documents que ont téléchargé. Donc, si l'utilisateur 1 a téléchargé abc, bbb et ccc, je veux toujours que ddd et eee apparaissent dans la table résultante, juste avec l'id comme NULL. Mais la clause WHERE ne me donne que des valeurs pour lesquelles des entrées existent.
Je ne suis pas un expert SQL - y a-t-il un opérateur qui me donnera ce que je veux ici? Devrais-je adopter une approche différente? Ou est-ce impossible?
Excellent! C'est ce que je cherchais. – ine
EDIT: J'ai répondu à ma propre question. J'ai été capable de trouver une bonne explication de pourquoi c'est vrai. http://weblogs.sqlteam.com/jeffs/archive/2007/05/14/criteria-on-outer-joined-tables.aspx –