8768 sujets

Développement web côté serveur, CMS

Bonjour
Comme je l'ai déjà dit, cela fait longtemps que je n'ai pas utilisé SQL.

J'ai le problème suivant:
- la table Members contient la liste des membres de l'association
- la table Addresses contient la liste des adresses connues du site, incluant les adresses des membres
Pour retrouver toutes les informations d'un membre, j'ai un SQL

SELECT m.*,
    a.street,
    a.zip,
    a.town
    FROM Members AS m
    JOIN Addresses AS a ON m.mbID = a.addressID
   WHERE m.mbID = :mbID

Cela ne marche que s'il existe effectivement dans la table Addresses une ligne où le champ addressID est égal au champ mbID de la table Members

Question: y a-t-il un moyen en SQL de récupérer cette erreur, à savoir ne récupérer que les informations du membre si son adresse n'est pas renseignée?
Actuellement je recherche séparément les informations du membre et de l'adresse, ce qui signifie deux requêtes au lieu d'une. Ce n'est pas un problème important si je ne recherche que les informations d'un seul membre, mais si je cherche les informations de plusieurs membres, cela multiplie les requêtes, ce que je préférerais éviter.

Merci de bien vouloir me rafraichir la mémoire.
Bonjour,

En remplacement de JOIN, utilise LEFT JOIN

(ou LEFT OUTER JOIN) : jointure externe pour retourner tous les enregistrements de la table de gauche (LEFT = gauche) même si la condition n’est pas vérifié dans l’autre table.

cela devrait correspondre à ta demande.
Meilleure solution
biduletruck a écrit :
Bonjour,

En remplacement de JOIN, utilise LEFT JOIN

(ou LEFT OUTER JOIN) : jointure externe pour retourner tous les enregistrements de la table de gauche (LEFT = gauche) même si la condition n’est pas vérifié dans l’autre table.

cela devrait correspondre à ta demande.

Merci beaucoup, c'est ce que je cherchais.