Question

J'ai 2 tables (il y a plus, mais un lié à la question) optionValue et productStock

Je veux obtenir les noms d'options de la table optionValue pour chaque option1, option2, option3 (la requête ci-dessous sera devrait aider à faire plus de sens)

ci-dessous est ma tentative, la requête en cours, il ne fonctionne que si toutes les options sont définies mais renvoie null si aucune option n'est pas définie:

    SELECT s.option1, n1.name s.optionName1, 
           s.option2, n2.name s.optionName2,
           s.option3, n3.name s.optionName3
    FROM productStock as s 
    INNER JOIN optionValue n1 on s.option1 = v1.optionValueID
    INNER JOIN optionValue n2 on s.option2 = v2.optionValueID
    INNER JOIN optionValue n3 on s.option3 = v3.optionValueID
    WHERE s.productStockID = 1

Je comprends pourquoi il ne fonctionne pas parce que lorsque l'option est null est ther aucune correspondance à la table optionValue mais je ne suis pas sûr de savoir comment le fixer (si elle est réparable)

Je lis dans quelques endroits sur l'utilisation de IN ou COALESCE mais je ne comprends pas comment les utiliser.

Était-ce utile?

La solution

Qu'est-ce que vous avez vraiment besoin d'abord pour corriger la conception de votre base de données. Chaque fois que vous avez des champs comme celui-ci: s.option1, s.option2, s.option3

Alors ce que vous avez vraiment besoin est une table enfant pour stocker les informations. Qu'est-ce qui se passe quand vous avez besoin 6 options ou 25? Ceci est une conception de base de données très mauvaise et ne causera pas de fin de problèmes démenés la requête inefficent vous avez maintenant à écrire. C'est un cancer au cœur de votre système et doit être corrigé avant toute autre chose se fait.

Autres conseils

Il semble que certains de votre syntaxe est un peu incorrect.

En dehors de cela que vous voulez LEFT OUTER JOIN au lieu de INNER JOIN.

explication visuelle de jointures SQL .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top