2017-10-16 14 views
0

Ceci est mon sql sélectionner statmentSélectionner toutes les valeurs (même si elle est nulle) avec jointure sql

SELECT k.name, c.name AS nameCustomer, o.* 
             FROM offertes o 
             INNER JOIN customers k 
             ON o.idCustomer= k.id 
             INNER JOIN contactperson c 
             ON o.idContact = c.id; 

Lorsque o.idContact n'existe pas, alors il n'y aura pas de valeurs sélectionnées. Je ne voulais pas obtenir NULL au lieu de rien. Il faut encore SELECT toute la rangée! Quelqu'un peut-il m'aider?

ps. Je pense que ça ne va pas avec la jointure interne (ON o.idContact = c.id);

+1

Avez-vous essayé d'utiliser la jointure 'LEFT' ou' RIGHT' en fonction de ce que vous vouliez? –

+0

left Joindre à votre première clause –

Répondre

1

Essayez ceci:

Remplacez votre dernière INNER JOIN avec LEFT JOIN.

En utilisant LEFT JOIN vous dites ma table principale (offertes) renvoie un résultat toujours, mais si dans le tableau secondaire (contactperson) il n'y a pas de ligne correspond retourne NULL tous les champs de cette table

SELECT k.name, c.name AS nameCustomer, o.* 
FROM offertes o 
INNER JOIN customers k 
ON o.idCustomer= k.id 
LEFT JOIN contactperson c 
ON o.idContact = c.id; 
+0

Merci beaucoup. C'est la meilleure solution. – Martijn

0

Vous aurez besoin d'une jointure externe à la place. par exemple.

SELECT k.name, c.name AS nameCustomer, o.* 
    FROM customers k LEFT OUTER JOIN 
     (offertes o INNER JOIN 
     contactperson c 
     ON o.idContact = c.id) 
     ON o.idCustomer= k.id; 

(je suppose qu'il y aura une contrepartie d'un à contactperson offerte, sinon vous aurez besoin d'une jointure externe là aussi)

0

vous avez besoin de réécrire une requête en utilisant jointure externe

SELECT k.name, c.name AS nameCustomer, o.* 
    FROM customers k 
    LEFT OUTER JOIN offertes o ON o.idCustomer = k.id 
    LEFT OUTER JOIN contactperson c ON o.idContact = c.id;